Spring的加密工具类---DigestUtils

最近有个需求参数传递需要加密,得用SHA-256加密和MD5加密,搞了半天,最后发现spring的工具类--DigestUtils集成了基本的加密算法,直接调用就行。

常见的加密算法分类:

常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。

对称加密

指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。

常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

非对称加密

指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。

常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法

Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1

加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。

加密算法的选择

前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢?

我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。

对称加密算法不能实现签名,因此签名只能非对称算法。

由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。

在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

回到正题,说一下工具类的使用

sha256的使用:

String encodekey = DigestUtils.sha256Hex("测试SHA256");
System.out.println(encodekey);

运行结果:

6c6c0785899852543f360d1270d400f709179fc03b62bada26aa0f69a8ec7dea

 源码:

 /**
     * Calculates the SHA-256 digest and returns the value as a hex string.
     * <p>
     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
     * </p>
     * 
     * @param data
     *            Data to digest
     * @return SHA-256 digest as a hex string
     * @since 1.4
     */
    public static String sha256Hex(String data) {
        return Hex.encodeHexString(sha256(data));
    }

md5的使用

String encodekey = DigestUtils.md5Hex("测试MD5");
System.out.println(encodekey);

运行结果:

c2dbb895a66c3ca924ccdbea49fa6884
/**
     * Calculates the MD5 digest and returns the value as a 16 element <code>byte[]</code>.
     * 
     * @param data
     *            Data to digest
     * @return MD5 digest
     */
    public static byte[] md5(String data) {
        return md5(getBytesUtf8(data));
    }

该类同时提供了上述两个方法的重载方法传入的不同参数,在此不做赘述,支持的加密算法如下:

    private static MessageDigest getMd5Digest() {
		return getDigest("MD5");
	}

	private static MessageDigest getSha256Digest() {
		return getDigest("SHA-256");
	}

	private static MessageDigest getSha384Digest() {
		return getDigest("SHA-384");
	}

	private static MessageDigest getSha512Digest() {
		return getDigest("SHA-512");
	}

	private static MessageDigest getShaDigest() {
		return getDigest("SHA");
	}

 

  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.springframework.core-3.1.0是Spring框架的一个核心模块,用于提供核心的功能和工具。它包含了一些基础类和接口,用于支持Spring框架的其他模块的运行。 其中,org.springframework.core-3.1.0模块包括以下几个重要的功能: 1. 依赖注入机制:org.springframework.core-3.1.0提供了Spring框架中的依赖注入机制。通过使用它提供的注解和配置方式,可以实现对象之间的解耦和依赖关系的管理,从而降低代码的耦合度,提高代码的可重用性和可维护性。 2. 类型转换:org.springframework.core-3.1.0还提供了类型转换的功能。它包含了一些类型转换的工具类,可以方便地进行各种类型之间的转换操作,如字符串到数字的转换、日期类型的转换等。 3. 资源管理:org.springframework.core-3.1.0提供了资源管理的功能。它包含了一些基础的资源接口和实现类,用于加载和管理应用程序中的各种资源,如文件、URL、类路径下的资源等。 4. 注解处理:org.springframework.core-3.1.0还提供了注解处理的功能。它包含了一些注解处理的工具类和接口,可以方便地进行注解的解析和处理,实现一些特定的功能,如AOP切面、事务管理等。 总之,org.springframework.core-3.1.0是Spring框架中一个非常重要的核心模块,提供了许多基础的功能和工具,用于支持整个Spring框架的运行和扩展。它的存在为开发人员提供了便捷的开发方式和丰富的功能选择,提高了软件开发的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值