当前位置: 首页 > 知识库问答 >
问题:

使用BCryptPasswordEncoder时获取相同的哈希值

沈高峻
2023-03-14

我正在使用BCryptPasswordEncoder使用spring security。现在对于更改密码,我需要做的是比较用户提供的现有密码和DB值。

但是由于salt是由bcryptpasswordencoder动态生成的,所以每次我从下面的方法得到不同的散列值,并且不一定会与我的DB值匹配。

public static String encodePassword(String password) {
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String hashedPassword = passwordEncoder.encode(password);
    return hashedPassword;
} 

解决这个问题的办法是什么?我能识别用于我的DB字段的盐并在上面的方法中使用相同的盐吗?

共有1个答案

夏理
2023-03-14

使用passwordencoder接口上的matchs方法检查密码是否有效,而不是重新编码并与现有哈希进行比较。

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String existingPassword = ... // Password entered by user
String dbPassword       = ... // Load hashed DB password

if (passwordEncoder.matches(existingPassword, dbPassword)) {
    // Encode new password and store it
} else {
    // Report error 
}
 类似资料:
  • 我在这里有一个旧的基于Symfony2的应用程序,我正在用Java开发Dropwizard替代它。我将所有用户记录从旧数据库迁移到新的数据模型中。我还为密码添加了新字段,并导入了旧密码和盐字段。 现在我想做一个众所周知的程序。让用户登录,对新密码字段进行尝试。如果失败,尝试迁移的密码,如果它们工作,用新算法编码明文密码,并将新哈希存储在新密码字段中。因此,用户将密码哈希从旧过程移植到新过程。 听起

  • 问题内容: 我在一个基于Java的系统中工作,我需要为视觉显示中的某些元素设置一个ID。一类元素是字符串,因此我决定使用String.hashCode()方法来获取这些元素的唯一标识符。 但是,我遇到的问题是,如果id为负,并且经常返回负值,那么我正在borks中工作的系统。一种快速的解决方案是仅在哈希码调用周围使用Math.abs()来确保得到肯定的结果。我想知道这种方法是,两个不同的元素具有相

  • 问题内容: 我有一个哈希图,如下所示: 1-> x 2-> y 3-> x 4-> z 现在我想知道所有值为x的键(ans:[1,3])。最好的方法是什么? 蛮力方式是仅遍历map并将所有键存储在值为x的数组中。 有什么有效的方法吗? 谢谢 问题答案: 您可以使用轻松获取所有这些重复的值。 打印输出: 每@ noahz 的建议,并需要更少的线,但可以说是更加复杂的阅读: 代替:

  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个

  • 我从数组列表中检索数据。已有数组列表具有与哈希映射类型(key、values)相同值;在从数组列表中检索这些数据并映射到哈希映射变量之后。我必须用一个叫做tax的变量来分组。 1)在哈希映射中添加Add 之后,将这些哈希映射值添加到名为final_cart_list_1的数组列表初始化类型的Arraylist中 在此之后,我将所有产品的产品特别税值 税务的日志cat值如下所示 之后,我采取产品的具

  • 我在Spring和Redis上都很新。我想知道有没有办法按价值得到钥匙? 例如,我希望获得具有给定文件哈希和内容的图像类型文件的get the KEY。我是这样做的: 然而,我被告知这是相当昂贵的,因为我要获得所有以“image”开头的键,并手动检查所有这些键。 现在我在想,也许如果我能按价值得到钥匙会好得多。以便更容易得到它的所有属性。在Redis可能吗?