gpt4 book ai didi

java - 带有 BCrypt 哈希的 AES 256。如何从数据库中查看用户密码?

转载 作者:行者123 更新时间:2023-12-01 10:32:55 27 4
gpt4 key购买 nike

我使用 AES256 加密,但可以使用安全 key 解密。我对加密密码进行哈希处理并将其存储在我的数据库中。但明文“密码”每次的加密方式都不同。 BCrypt 的哈希值每次都不同。当用户提交他/她的密码时,我如何存储或检查密码?

 AES256Encryption d = new AES256Encryption();


String password = "password";
System.out.println("password : " + password);
String encPsw = d.encrypt(password);
System.out.println("Encrypted string:" + encPsw);


String hash = BCrypt.hashpw(encPsw, BCrypt.gensalt());
System.out.println("hashed string : " + hash);

if(BCrypt.checkpw(password,hash )){
System.err.println("password matched!!");
}else{
System.err.println("password not matched!!");
}

这些代码总是打印“密码不匹配!!”。如何比较用户的密码和数据库中的哈希密码?

最佳答案

bcrypt 是一个密码散列函数。如果您想验证密码,则必须提供用于生成哈希的相同密码。

目前,您正在通过 AES 加密的密码生成 bcrypt 哈希,但您使用未加密的密码检查哈希。您可以查看加密后的密码:

if(BCrypt.checkpw(d.encrypt(password), hash)){

但是如果 AES256Encryption#encrypt 实际上是安全的,这就会被破坏。加密通常是随机的(为了语义安全)。因此再次加密不会得到与之前散列相同的加密密码。

此外,如果您有静态 key ,使用 AES 加密并不比单独执行 bcrypt 提供更多的安全性。如果AES256Encryption#encrypt在语义上是安全的(随机的),那么你不能混合使用AES和bcrypt。您必须删除 AES 加密。

关于java - 带有 BCrypt 哈希的 AES 256。如何从数据库中查看用户密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34996055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com