我试图哈希密码并将其保存在数据库中; 我知道哈希是一个单向的过程.如何检查用户提供的密码和存储在数据库中的密码是否相同?我正在使用MD5,当我每次执行散列时,我得到相同输入的不同值.有人可以帮忙吗?
String pass = "wor1ldcup";
String pass1 = "wor1ldcup";
DigestUtils du = new DigestUtils();
byte[] b = du.md5(pass);
byte[] b1 = du.md5(pass1);
Run Code Online (Sandbox Code Playgroud)
您提供的代码基本上是正确的,有几点需要注意:
方法DigestUtils都是static,因此应该被调用为:
byte[] b = DigestUtils.md5(...);
Run Code Online (Sandbox Code Playgroud)
而不是
DigestUtils du = new DigestUtils(); // wrong ... no need to instantiate
byte[] b = du.md5(...); // wrong ... never use an instance to
// call a static method.
Run Code Online (Sandbox Code Playgroud)你没有展示你如何比较b和b1,但是b == b1不会起作用,也不会b.equals(b2)......比较参考文献.你需要打电话Arrays.equals(b, b1).
尝试将MD5哈希转换为字符串是一个坏主意.根据默认字符集,转换可能会变得有损; 即不可逆.如果要在数据库中存储MD5哈希,最好使用(例如)base64编码将其编码为String,并保存编码的哈希.