【问题标题】:From SHA hashing to password从 SHA 哈希到密码
【发布时间】:2019-07-24 22:04:24
【问题描述】:

所以我编写了这段代码来转换为我的密码的哈希值,我现在想要获取哈希值并将其转换回字符串。怎么可能做到这一点?

package security;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HashPassword {

    public static String hashPassword(String password) throws NoSuchAlgorithmException 
    {
        MessageDigest sha= MessageDigest.getInstance("SHA");
        sha.update(password.getBytes());
        byte [] b=sha.digest();
        StringBuffer sb= new StringBuffer();
        for(byte b1:b)
        {
            sb.append(Integer.toHexString(b1 & 0xff).toString());
        }

        return sb.toString();
    }
    public static void main(String[] args) 
    {
       String password="1234";
       System.out.println(password);
       try
       {
       System.out.println(hashPassword(password));
       }catch(NoSuchAlgorithmException e)
       {}
    }

}

【问题讨论】:

  • 你没有。这就是哈希的意义所在。为什么你认为你需要原始字符串,你想要完成什么?

标签: java string hash passwords


【解决方案1】:

正如其他人指出的那样,哈希并不是要“转换”回其原始值。出于这个确切原因,在数据库中使用哈希来存储密码。使用存储在数据库中的哈希,即使我可以访问数据库,我也无法弄清楚存储在那里的密码。

现在根据您对哈希的使用情况,您可以尝试多种方法:

1.
你只是想让密码在一段时间后变得不可读和可读
在这种情况下,您可以使用加密和解密算法而不是哈希方法。这样,您可以根据需要取回原始值。

举个简单的例子:https://www.thejavaprogrammer.com/caesar-cipher-java-encryption-decryption/
切勿使用加密来存储密码。

2.
您想实现一个登录/注册服务/系统,在其中将密码存储为哈希值。
如果这样是你想要的我建议使用友好的 bcrypt:https://en.wikipedia.org/wiki/Bcrypt
今天 bcrypt 在某种程度上是散列密码和其他信息的标准。 Java 实现还提供了一种很好的方法来检查输入的密码是否与存储的密码匹配。因此,您不必为了检查密码而在几天内破解哈希。

bcrypt 的 Java 实现可以在这里找到:http://www.mindrot.org/projects/jBCrypt/


【讨论】:

    【解决方案2】:

    散列密码的全部意义在于实现一件事:尽可能难以从散列版本中获取原始密码。

    无论如何,您永远不需要那个原始密码。您只需保留散列(和加盐!)密码,每当您需要再次验证用户身份时,您要求他的密码,散列,并检查它是否与您之前存储的持久散列密码匹配。

    所以:虽然有时可以从其哈希中获取密码,但这只是您不关心的事情(除非您是一位想要评估哈希实施质量的密码学家)。

    【讨论】:

      【解决方案3】:

      你可以尝试用Rainbow table破解它

      【讨论】:

      • 我喜欢这个答案指向的方式。你能详细说明一下吗?
      猜你喜欢
      • 2018-09-10
      • 2010-11-25
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2012-07-07
      相关资源
      最近更新 更多