这种方法会使sha256更难破解吗?
Will this method make sha256 harder to crack?
这个方法会不会让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;
}
你所拥有的称为密钥拉伸,它会使 SHA 更难破解。基本过程是稍微增加服务器所做的工作,以大量增加任何攻击者必须做的工作。
这是有效的,因为服务器从已知明文输入中导出散列,而攻击者则对明文必须是什么进行许多猜测。这意味着服务器拉伸密钥一次,而攻击者必须拉伸多次。
您可以阅读有关此技术的更多信息 here。一些散列算法,例如 bcrypt,总是假定涉及像这样的多轮。
SHA-256 是一种不可逆的单向加密哈希函数。应用该哈希 10 次不会 创建 任何额外的安全性,尽管它确实使典型的彩虹攻击更加困难(但使用 Salt 将具有相同的优势)。您的散列机制有一个相当大的缺点,它需要 10 倍的时间才能 运行.
这个方法会不会让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;
}
你所拥有的称为密钥拉伸,它会使 SHA 更难破解。基本过程是稍微增加服务器所做的工作,以大量增加任何攻击者必须做的工作。
这是有效的,因为服务器从已知明文输入中导出散列,而攻击者则对明文必须是什么进行许多猜测。这意味着服务器拉伸密钥一次,而攻击者必须拉伸多次。
您可以阅读有关此技术的更多信息 here。一些散列算法,例如 bcrypt,总是假定涉及像这样的多轮。
SHA-256 是一种不可逆的单向加密哈希函数。应用该哈希 10 次不会 创建 任何额外的安全性,尽管它确实使典型的彩虹攻击更加困难(但使用 Salt 将具有相同的优势)。您的散列机制有一个相当大的缺点,它需要 10 倍的时间才能 运行.