位置:org.springframework.util
�实现接口:无
继承类:无(抽象类)
作用:提供加解密工具API

一、效果

提供不可逆的MD5加密方法

  1. @Test
  2. public void test1() throws Exception {
  3. String password = "abc123456";
  4. String asHex = DigestUtils.md5DigestAsHex(password.getBytes());
  5. byte[] bytes = DigestUtils.md5Digest(password.getBytes());
  6. System.out.println(asHex);
  7. for (byte bit:bytes) {
  8. System.out.print(bit);
  9. }
  10. }

二、API

  1. /* 核心API:
  2. 生成对象,调用MessageDigest对象的digest方法生成摘要
  3. 在MessageDigest中:
  4. public static MessageDigest getInstance(String algorithm):通过传入的加密名称生成对象
  5. public void update(byte[] input):传入要加密的内容,更新摘要对象
  6. public byte[] digest():返回加密后的摘要
  7. */
  8. private static byte[] digest(String algorithm, byte[] bytes) {
  9. return getDigest(algorithm).digest(bytes);
  10. }

三、总结

spring的DigestUtils使用报文摘要对象MessageDigest生成数据唯一且可靠的标识符。但改类只提供了MD5算法的加密操作,没有逆向解密,主要供框架内部使用。

四、补充

apache commons-codec下也存在一个加密DigestUtils工具类,支持MD5\Sha1\Base64加密和Bse64解密。
引入依赖:

  1. <dependency>
  2. <groupId>commons-codec</groupId>
  3. <artifactId>commons-codec</artifactId>
  4. <version>1.8</version>
  5. </dependency>
  1. public class UtilTest {
  2. static final String TARGET = "中文123abc,./";
  3. /*
  4. * 不可逆算法 MD5
  5. */
  6. @Test
  7. public void Md5()
  8. {
  9. String str = DigestUtils.md5Hex(TARGET);
  10. System.out.println("md5Hex: "+str);
  11. }
  12. /*
  13. * 不可逆算法 SHA1
  14. */
  15. @Test
  16. public void Sha1()
  17. {
  18. String str = DigestUtils.shaHex(TARGET);
  19. print("shaHex: "+str);
  20. str = DigestUtils.sha256Hex(TARGET);
  21. print("sha256Hex: "+str);
  22. str = DigestUtils.sha384Hex(TARGET);
  23. print("sha384Hex: "+str);
  24. str = DigestUtils.sha512Hex(TARGET);
  25. print("sha512Hex: "+str);
  26. }
  27. /*
  28. * 可逆算法 BASE64
  29. */
  30. @Test
  31. public void Base64()
  32. {
  33. //加密
  34. byte[] b = Base64.encodeBase64(TARGET.getBytes(), true);
  35. String str = new String(b);
  36. print("BASE64: "+str);
  37. //解密
  38. byte[] b1 = Base64.decodeBase64(str);
  39. print("解密之后内容为: "+new String(b1));
  40. }
  41. public void print(Object obj)
  42. {
  43. System.out.println(obj);
  44. }
  45. }

参考资料: 加密算法:DigestUtils与java MessageDigest MessageDigest 类的用法