作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试散列密码并将其保存在数据库中;我知道散列是一种单向过程。如何检查用户提供的密码和数据库中存储的密码是否相同?我正在使用 MD5,每次执行散列时,我都会为相同的输入获得不同的值。谁能帮忙?
String pass = "wor1ldcup";
String pass1 = "wor1ldcup";
DigestUtils du = new DigestUtils();
byte[] b = du.md5(pass);
byte[] b1 = du.md5(pass1);
最佳答案
您提供的代码基本上是正确的,但有几点需要注意:
DigestUtils
的方法都是static
,因此应该按以下方式调用:
byte[] b = DigestUtils.md5(...);
不像
DigestUtils du = new DigestUtils(); // wrong ... no need to instantiate
byte[] b = du.md5(...); // wrong ... never use an instance to
// call a static method.
您没有说明如何比较 b
和 b1
,但是 b == b1
将不起作用, b.equals(b2)
也不会……两者都比较引用。您需要调用 Arrays.equals(b, b1)
。
尝试将 MD5 哈希值转换为字符串是一个坏主意。根据默认的字符集,转换可能会产生损失;即不可逆。如果要在数据库中存储 MD5 哈希值,最好使用(例如)base64 编码将其编码为字符串,并保存编码后的哈希值。
关于java - 如何在java中使用哈希函数对密码进行哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307317/
我是一名优秀的程序员,十分优秀!