【详解】MD5加密真的安全吗?不安全有什么解决办法? 您所在的位置:网站首页 悦生活app是什么东西啊安全吗 【详解】MD5加密真的安全吗?不安全有什么解决办法?

【详解】MD5加密真的安全吗?不安全有什么解决办法?

2024-07-16 02:38| 来源: 网络整理| 查看: 265

欢迎关注公众号:天天说编程    免费改简历,资料分享,面试经验分享。私信即可。 1、MD5加密简介

在用户注册是时候,通常使用MD5加密,先看下什么是MD5加密,以及加密过程?

MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法。

2、MD5有以下特性:

压缩性:任意长度的数据,算出的MD5值长度都是固定的。

容易计算:从原数据计算出MD5值很容易。

抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

3、MD5加密有哪些问题?

用户注册的时候保存的是用户输入密码的散列值,而不是保存密码。

这样在用户登录的时候,将用户的密码使用散列算法计算一下散列值,和数据库注册的时候保存的散列值比较一下。如果相同就认为登录成功。

其实这样是不安全的,只要把经常出现的密码和对应的散列值保存起来,保存到数据库。只要拿到用户密码的散列值,只要用户的密码不是非常复杂的,就很有可能把散列值的原始密码找出来。这样黑客就会继续撞库。

此时我们可以使用加盐算法。

在用户注册的时候,生成一个随机的复杂字符串做为"盐",这个盐也保存在数据库里面。同时把用户输入的密码加上这个盐,再计算出散列值保存在数据库中。这样在用户登录的时候,只要把用户输入的密码和盐连接起来,计算出一个散列值,再和数据库中的散列值比较一下,就可以知道密码是不是正确的了。由于盐比较复杂,导致用户的密码和盐连接在一起的字符创更加复杂。这样计算出的散列值就很难反向推算出原始的密码了。即使用户密码很简单,黑客拿到了散列值,也无法破解密码。也没发去别的网站尝试撞库了 。

4、相关代码自测 public class MD5Utils { public static String getMD5Str(String str) throws NoSuchAlgorithmException { MessageDigest d = MessageDigest.getInstance("md5"); // 这儿采用的是加盐的方式 return Base64.getEncoder().encodeToString(d.digest((str + Constant.SALT).getBytes())); } public static void main(String[] args) throws NoSuchAlgorithmException { String s = getMD5Str("123456"); System.out.println(s); } }

欢迎关注公众号:天天说编程    免费改简历,资料分享,面试经验分享。私信即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有