在上学期间,我需要使用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职业选手。 提前谢谢!
答案 0 :(得分:5)
更改
BCrypt.checkpw(password, hashedPW);
到
BCrypt.checkpw(enteredPassword, password);
然后它会正确评估。
如果密码附加了salt并且生成了哈希,那么无关紧要。
具有不同盐的相同密码的哈希值,根据生成密码的密码进行评估时,将评估为真。
哈希是一种算法,这意味着我们不能通过哈希重新计算密码。我们只能使用散列算法将密码与密码的哈希进行比较。哈希算法通常用于生成哈希并将其与生成的哈希进行比较。我们使用哈希来安全地存储密码