java - 将散列密码与 salt (bcrypt) 进行比较总是返回 false

标签 java android hash bcrypt 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 专家可以帮助我。 提前致谢!

最佳答案

改变

BCrypt.checkpw(password, hashedPW);

BCrypt.checkpw(enteredPassword, password);

然后它将正确评估。

密码加salt和生成hash都没关系。

具有不同盐的相同密码的哈希值,在根据生成它的密码进行评估时,将评估为真。

哈希是一种算法,这意味着我们不能通过哈希重新计算密码。我们只能使用哈希算法将密码与密码的哈希值进行比较。哈希算法通常用于生成哈希值并将其与生成它的任何内容进行比较。我们使用哈希来安全地存储密码

关于java - 将散列密码与 salt (bcrypt) 进行比较总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43513880/

相关文章:

java - 如何将GUI添加到已完成的程序中?

java - 数字格式问题,新手项目

android - 我的 Android Listview 适配器中的 IndexOutOfBoundsException

android - Flutter 应用加载动态库失败

python - PIL 图像的简单哈希

java - 为类的对象分配适当的函数

java - 在 java 线程内停止播放器 (JLayer)

android - 横跨 View 的对角线

algorithm - 将 n 个元素插入空哈希表的运行时间

c++ - 哈希表 : Double hashing when the second hash function returns a multiple of the table size