Java 这种方法会使sha256更难破解吗?

Java 这种方法会使sha256更难破解吗?,java,hashalgorithm,Java,Hashalgorithm,这种方法会使sha256更难破解吗 public byte[] hash(String password) throws NoSuchAlgorithmException { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] passBytes = password.getBytes(); byte[] passHash = sha256.digest(passBytes);

这种方法会使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;
 }
public byte[]散列(字符串密码)抛出NoSuchAlgorithmException{
MessageDigest sha256=MessageDigest.getInstance(“SHA-256”);
byte[]passBytes=password.getBytes();
字节[]passHash=sha256.digest(passBytes);
对于(int i=0;i<10;i++){
passHash=sha256.digest(passHash);
}
返回passHash;
}

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

这是有效的,因为服务器从已知的明文输入中派生哈希,而攻击者则对明文必须是什么进行许多猜测。这意味着服务器会拉伸密钥一次,而攻击者必须多次拉伸密钥


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

SHA-256是一个不可逆的单向加密散列函数。应用该散列10次不会产生任何额外的安全性,尽管它确实会使典型的彩虹攻击变得更加困难(但使用a也有同样的优势)。您的散列机制有一个相当大的缺点,即运行时间是原来的10倍。

但是如果攻击者强行执行并获得生成散列的密钥,那么他必须强行执行10次才能获得第一个密钥?您似乎在混淆彩虹表(一种很容易用来攻击10倍SHA-256的机制)和可逆加密。a不一定与初始密钥相同,但可以用来代替正确的密钥。