如何在java中使用哈希函数来哈希密码?

sat*_*oid 1 java

我试图哈希密码并将其保存在数据库中; 我知道哈希是一个单向的过程.如何检查用户提供的密码和存储在数据库中的密码是否相同?我正在使用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)

Ste*_*n C 5

您提供的代码基本上是正确的,有几点需要注意:

  1. 方法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)
  2. 你没有展示你如何比较bb1,但是b == b1不会起作用,也不会b.equals(b2)......比较参考文献.你需要打电话Arrays.equals(b, b1).

  3. 尝试将MD5哈希转换为字符串是一个坏主意.根据默认字符集,转换可能会变得有损; 即不可逆.如果要在数据库中存储MD5哈希,最好使用(例如)base64编码将其编码为String,并保存编码的哈希.