使用salt(bcrypt)比较哈希密码总是返回false
问题描述:
在为学校做练习时,我需要使用bcrypt正确存储密码(散列在数据库中)。比较它们时,该方法总是返回false。我的代码看起来像这样:使用salt(bcrypt)比较哈希密码总是返回false
注册:
String username = editTextUsername.getText().toString();
String password = editTextPassword.getText().toString();
String hashedPW = BCrypt.hashpw(password, BCrypt.gensalt());
User user = new User(username, hashedPW);
user.save();
登录:
String username = editTextUsername.getText().toString();
String enteredPassword = editTextPassword.getText().toString();
String hashedPW = BCrypt.hashpw(enteredPassword, BCrypt.gensalt());
User u = usercontroller.getUser(username); //gets user object
String password = u.getPassword;
BCrypt.checkpw(password, hashedPW); //always returns false
我希望有任何BCrypt优点在那里,可能可能帮助我。 提前谢谢!
答
CHAGE
BCrypt.checkpw(password, hashedPW);
到
BCrypt.checkpw(enteredPassword, password);
那么它会正确评价。无论密码是否附加了salt并生成了散列,都是如此。当使用不同的盐进行相同密码的哈希处理时,应根据生成的密码进行评估,并将其评估为true。哈希是单向算法。我们不能重新计算具有哈希的密码,我们只能使用哈希算法比较密码哈希。哈希是用来安全地存储密码
你应该从UI作为第一个参数和第二个参数从你的商店(哈希之一)传递明文密码。 – dvsakgec
我不是你正在寻找的BCrypt专业人士,但我可以想象'BCrypt.gensalt()'返回一个随机数,每次调用它时都不相同。因此,我认为你的散列不同,因为如果gensalt不同的结果 – 0xDEADC0DE