gpt4 book ai didi

java - BCrypt:如何从我正在散列的字符串中生成盐?

转载 作者:行者123 更新时间:2023-11-29 05:20:54 27 4
gpt4 key购买 nike

简短的问题:我不想使用 bcrypt 随机生成的盐。假设我正在散列的密码是“abcd1234”。在过去的好日子里,盐是“ab”或“abcd”或“abcd12”,换句话说,盐是密码的前 N ​​个字符,其中 N 是密码所需的最小长度。那么如何从密码本身生成有效的 bcrypt salt?

长问题:我正在使用消息系统,换句话说,将在内部发送一条消息以进行身份​​验证,出于显而易见的原因,我不能在此消息中包含明文密码。所以流程应该是这样的:

  • 机器A得到明文密码
  • 机器 A 使用 bcrypt 对密码进行哈希运算
  • 哈希(即安全)密码在我的内部消息中发送
  • 机器 B,它是具有散列密码数据库的身份验证机器,收到消息,现在它必须将收到的散列密码与数据库中的散列密码进行比较以进行身份​​验证。

但是如果 BCrypt 不允许我使用从我的纯文本密码派生的盐,我该怎么办呢?机器 A 对任何盐一无所知。它没有对数据库的任何访问权限。机器 B 将知道这一点。所以必须有一种方法可以从“abcd1234”派生我的 bcrypt 盐,或者 bcrypt 应该有一个方法:

check(String hashedPasswordWithSaltA, String hashedPasswordWithSaltB);

简而言之:机器 A 获得密码,而机器 B 是拥有身份验证数据库的机器。我不想将密码以明文形式从 A 传递到 B,但看起来 bcrypt 迫使我这样做。 :(

最佳答案

只需传输带有散列密码的盐。加盐密码的要点是,在数据库中,明文相同的两个密码具有不同的哈希值。如果您从密码本身生成此盐,此逻辑就会失效。此外,出于解密目的,您必须以明文形式存储盐,实际上是在泄露用户密码的一部分。

TLDR:让 Bcrypt 为您生成盐。然后使用散列密码传输盐。盐不是 secret 。

关于java - BCrypt:如何从我正在散列的字符串中生成盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com