【问题标题】:How can I hash a password and store it for later verification with another digest?如何散列密码并将其存储以供以后使用另一个摘要进行验证?
【发布时间】:2011-11-07 22:50:36
【问题描述】:

我正在使用 gsoap 的 wsseapi 插件,并希望存储散列的 sha1 密码而不是纯文本。我花了很多时间尝试各种方法来对纯文本密码进行哈希处理以进行存储。

谁能建议一种对密码进行哈希处理的方法,以便稍后根据客户端发送的用户名令牌摘要对其进行验证?

我似乎无法获取客户端密码来针对我存储的哈希进行身份验证。

【问题讨论】:

    标签: c++ c passwords gsoap


    【解决方案1】:

    不要推出自己的加密货币;使用社区熟知并接受的方案,例如 PBES2(由PKCS#5 v2.1 指定)。如果幸运的话,你会找到一个现成的实现(提示:OpenSSL 可能会)。

    【讨论】:

    • 我试图使用基本 sha1 仅对摘要的密码部分进行哈希处理(省略随机数和创建时间)。我的想法是,我可以快速验证客户端发送的哈希值与存储的哈希值。当哈希由密码、随机数和时间戳组成时,我不确定是否可以专门获取客户端发送的密码哈希。
    【解决方案2】:

    不存储纯文本密码很好。选择一个被开发为非常快速计算的哈希是..不是那么聪明。在http://www.tarsnap.com/scrypt.html 阅读更多关于“密钥派生”的信息。基本上它会减慢“计算哈希密码”的速度很多,因此攻击者尝试使用蛮力的速度会减慢。

    【讨论】:

    • 谢谢,gsoap 有一个 soap_wsse_session_verify() 似乎可以防止可能的重放攻击。我希望这能完成这项工作。
    【解决方案3】:

    好像两边都需要明文密码。这样在服务器上,存储的密码使用客户端创建的随机数进行哈希处理,然后比较密码哈希值。

    我认为客户端可能有一种方法可以输入普通的字母数字密码,而服务器可以检索相同密码的预存储散列版本以进行比较。由于随机数、时间戳等原因,这似乎是不可能的

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2011-09-08
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多