MD5:一种哈希算法

 

实质上,MD5 只是一种哈希算法。

 

哈希算法,即 hash,又叫散列算法,是一类把任意数据转换为定长(或限制长度)数据的算法统称。例如我叫张三,你叫李四,那么「人 -> 人名」的算法就叫属于一种哈希算法。哈希算法通常用于制作数字指纹,数字指纹的意思就是「你看到这个东西就像看到原数据一样」,例如我们在一些网站下载大文件的时候,网站提供给我们验证文件完整性的 MD5 或者 SHA1 码,就是原文件的哈希值。哈希算法有很多种,MD5 是其中的一种,这就是 MD5。所以,优秀的哈希算法通常需要具有低碰撞概率(即不同数据的哈希值通常也不一样)。

 

加密是什么?

 

加密,指的是对数据进行转换以后,数据变成了另一种格式,并且除了拿到解密方法的人,没人能把数据转换回来。因此,加密通常用于网络通信。因为网络上的通信数据,任何人都有可能会拿到,把数据加密后再传送,送达以后由对方解密后再查看,就可以防止网络上的偷窥。例如大家都知道「安全」但很少人知道「为什么安全」的 HTTPS,就是通过加密算法来保障的网络安全性。

 

所以,MD5 是加密吗?

 

加密算法的目的,在于别人无法成功查看加密后的数据,并且在需要的时候还可以对数据进行解密来重新查看数据。而 MD5 算法是一种哈希算法,哈希算法的设计目标本身就决定了,它在大多数时候都是不可逆的,即你经过哈希算法得出的数据,无法再经过任何算法还原回去。所以,既然不能将数据还原,也就不能称之为可以解密;既然不能解密,那么哈希的过程自然也就不能称作是「加密」了。

 


1 加密方法:

1.1 java自带jar工具MessageDigest实现 
java.security.MessageDigest

  1. public class MD5Utils {
  2. public static String stringToMD5(String plainText) {
  3. byte[] secretBytes = null;
  4. try {
  5. secretBytes = MessageDigest.getInstance("md5").digest(
  6. plainText.getBytes());
  7. } catch (NoSuchAlgorithmException e) {
  8. throw new RuntimeException("没有这个md5算法!");
  9. }
  10. String md5code = new BigInteger(1, secretBytes).toString(16);
  11. for (int i = 0; i < 32 - md5code.length(); i++) {
  12. md5code = "0" + md5code;
  13. }
  14. return md5code;
  15. }
  16.  
  17. }

  

1.2 spring自带的工具DigestUtils实现 
org.springframework.util.DigestUtils

  1. DigestUtils.md5DigestAsHex("1234".getBytes())

  

2 使用方法:

  1. @Test
  2. public void testMd5() throws NoSuchAlgorithmException{
  3. MessageDigest md = MessageDigest.getInstance("MD5");
  4. // java自带工具包MessageDigest
  5. String resultString = MD5Utils.md5("123456");
  6. System.out.println(resultString);
  7. // e10adc3949ba59abbe56e057f20f883e
  8. String resultString1 = MD5Utils.md5("1234");
  9. System.out.println(resultString1);
  10. //81dc9bdb52d04dc20036dbd8313ed055
  11.  
  12. // spring自带工具包DigestUtils
  13. System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));
  14. // 81dc9bdb52d04dc20036dbd8313ed055
  15. }

  

 

版权声明:本文为xinruyi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xinruyi/p/11441607.html