gpt4 book ai didi

registration - 如何将密码从客户端发送到服务器

转载 作者:行者123 更新时间:2023-12-04 05:12:32 25 4
gpt4 key购买 nike

我正在使用 Jersey 创建一个 Web 服务。

该服务应处理用户注册。我的计划是获取一个包含用户名和密码的注册请求,将它们都存储在 MySql 数据库中,并在每次用户想要登录时获取它。

我读过您应该在发送密码之前使用 Base64 对密码进行编码,但听起来仍然不安全,因为如果有人拦截它,他可以轻松解密它。那么客户端究竟应该如何将用户名和密码传递给我呢?我应该如何将它们存储在数据库中?

最佳答案

您根本不应该存储密码。您应该存储一个加盐和加密的 blob,可以使用密码和加盐来复制。

看看 bcrypt scrypt .

要验证用户是否输入了正确的密码,您可以提取存储在密码 blob 中的参数,然后将密码应用到带有存储参数的加密函数 ( bcrypt )。如果输出与存储的哈希匹配,则可以认为用户已成功登录。

这背后的工作原理是,您假设某人可能已经获得了原始数据库,并且还确切地知道密码是如何存储的。如果您要直接存储密码或简单编码,他们可以简单地从数据转储中读取这些密码(必要时进行解码)。

由于以下三个原因,仅使用 SHA-3 等安全散列函数对密码进行散列也是不够的:

  • 在不加盐的情况下,攻击者可以简单地创建一个包含 X 个大多数密码的预计算列表,并可能使用这些列表通过将它们与查找表进行匹配来轻松解码数据库中的大量密码。这是有效的,因为这些散列函数应该始终为相同的输入产生相同的输出,并且因为“X 个最常见密码”的主列表在 Internet 上很容易获得。
  • 无需加盐,一旦密码被破解,攻击者就可以使用输入来轻松匹配同一数据库中的其他密码。这与上述原因相同。
  • 这些天散列非常快。因此,即使您对密码加盐,也可能不足以阻止拥有最常用密码列表的攻击者(可以想象,他们可以暴力破解最常用密码的加盐版本并构建巨大的查找表——这样的计算资源非常好)便宜的)。
  • 关于registration - 如何将密码从客户端发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315560/

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