博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MD5加密
阅读量:4310 次
发布时间:2019-06-06

本文共 1981 字,大约阅读时间需要 6 分钟。

MD5:一种哈希算法

 

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

 

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

 

加密是什么?

 

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

 

所以,MD5 是加密吗?

 

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

 


1 加密方法:

1.1 java自带jar工具MessageDigest实现 

java.security.MessageDigest

public class MD5Utils {    public static String stringToMD5(String plainText) {        byte[] secretBytes = null;        try {            secretBytes = MessageDigest.getInstance("md5").digest(                    plainText.getBytes());        } catch (NoSuchAlgorithmException e) {            throw new RuntimeException("没有这个md5算法!");        }        String md5code = new BigInteger(1, secretBytes).toString(16);        for (int i = 0; i < 32 - md5code.length(); i++) {            md5code = "0" + md5code;        }        return md5code;    }}

  

1.2 spring自带的工具DigestUtils实现 

org.springframework.util.DigestUtils

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

  

2 使用方法:

@Testpublic void testMd5() throws NoSuchAlgorithmException{    MessageDigest md = MessageDigest.getInstance("MD5");    // java自带工具包MessageDigest      String resultString = MD5Utils.md5("123456");    System.out.println(resultString);    // e10adc3949ba59abbe56e057f20f883e    String resultString1 = MD5Utils.md5("1234");    System.out.println(resultString1);    //81dc9bdb52d04dc20036dbd8313ed055    // spring自带工具包DigestUtils    System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));    // 81dc9bdb52d04dc20036dbd8313ed055}

  

 

转载于:https://www.cnblogs.com/xinruyi/p/11441607.html

你可能感兴趣的文章
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(三) 构建镜像
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>