位置:org.springframework.util
�实现接口:无
继承类:无(抽象类)
作用:提供加解密工具API
一、效果
提供不可逆的MD5加密方法
@Test
public void test1() throws Exception {
String password = "abc123456";
String asHex = DigestUtils.md5DigestAsHex(password.getBytes());
byte[] bytes = DigestUtils.md5Digest(password.getBytes());
System.out.println(asHex);
for (byte bit:bytes) {
System.out.print(bit);
}
}
二、API
/* 核心API:
生成对象,调用MessageDigest对象的digest方法生成摘要
在MessageDigest中:
public static MessageDigest getInstance(String algorithm):通过传入的加密名称生成对象
public void update(byte[] input):传入要加密的内容,更新摘要对象
public byte[] digest():返回加密后的摘要
*/
private static byte[] digest(String algorithm, byte[] bytes) {
return getDigest(algorithm).digest(bytes);
}
三、总结
spring的DigestUtils使用报文摘要对象MessageDigest生成数据唯一且可靠的标识符。但改类只提供了MD5算法的加密操作,没有逆向解密,主要供框架内部使用。
四、补充
apache commons-codec下也存在一个加密DigestUtils工具类,支持MD5\Sha1\Base64加密和Bse64解密。
引入依赖:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
</dependency>
public class UtilTest {
static final String TARGET = "中文123abc,./";
/*
* 不可逆算法 MD5
*/
@Test
public void Md5()
{
String str = DigestUtils.md5Hex(TARGET);
System.out.println("md5Hex: "+str);
}
/*
* 不可逆算法 SHA1
*/
@Test
public void Sha1()
{
String str = DigestUtils.shaHex(TARGET);
print("shaHex: "+str);
str = DigestUtils.sha256Hex(TARGET);
print("sha256Hex: "+str);
str = DigestUtils.sha384Hex(TARGET);
print("sha384Hex: "+str);
str = DigestUtils.sha512Hex(TARGET);
print("sha512Hex: "+str);
}
/*
* 可逆算法 BASE64
*/
@Test
public void Base64()
{
//加密
byte[] b = Base64.encodeBase64(TARGET.getBytes(), true);
String str = new String(b);
print("BASE64: "+str);
//解密
byte[] b1 = Base64.decodeBase64(str);
print("解密之后内容为: "+new String(b1));
}
public void print(Object obj)
{
System.out.println(obj);
}
}
参考资料: 加密算法:DigestUtils与java MessageDigest MessageDigest 类的用法