1

这种方法会不会让sha256更难破解?

 public byte[] hash(String password) throws NoSuchAlgorithmException {
     MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
     byte[] passBytes = password.getBytes();
     byte[] passHash = sha256.digest(passBytes);
     for (int i = 0; i < 10; i++) {
         passHash = sha256.digest(passHash);
     }
     return passHash;
 }
4

2 回答 2

2

你所拥有的称为键拉伸,它会使 SHA 更难破解。基本过程是稍微增加服务器所做的工作,以大量增加任何攻击者必须做的工作。

这是有效的,因为服务器正在从已知的明文输入中获取散列,而攻击者正在对明文进行许多猜测。这意味着服务器将密钥拉伸一次,而攻击者必须多次这样做。

您可以在此处阅读有关此技术的更多信息。一些散列算法,例如 bcrypt,总是被假定涉及像这样的多轮。

于 2015-02-03T17:11:17.027 回答
1

SHA-256 是一种不可逆的单向加密哈希函数。应用该哈希 10 次不会产生任何额外的安全性,尽管它确实使典型的彩虹攻击更加困难(但使用Salt将具有相同的优势)。您的散列机制有一个相当大的缺点,因为它需要 10 倍的运行时间。

于 2015-02-03T17:12:45.247 回答