AES 256 with BCrypt hash. How to check user password from database?
本问题已经有最佳答案,请猛点这里访问。
我使用的是AES256加密,但它可以用安全密钥解密。我把加密的密码散列并存储在数据库中。但是纯文本"密码"每次加密的不同。每次按bcrypt散列不同,用户提交密码时如何存储或检查密码?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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哈希,但您使用未加密密码检查哈希。您可以检查加密的密码:
1 | if(BCrypt.checkpw(d.encrypt(password), hash)){ |
但是,如果
此外,如果您有一个静态密钥,那么使用AES加密并不能提供比单独执行bcrypt更高的安全性。如果