gpt4 book ai didi

c# - 散列和加盐密码字段

转载 作者:太空狗 更新时间:2023-10-29 22:34:01 28 4
gpt4 key购买 nike

一段时间以来,我一直在思考如何将密码存储在我的数据库中的问题。这是我第一次制作带有 Web 登录的安全应用程序,因此我想建立一些好的做法。

首先,我阅读了散列法和加盐法。看来思路是……

  1. 获取哈希算法
  2. 获取用户密码
  3. 向用户的纯文本密码添加“盐”
  4. 散列整个密码(包括盐)
  5. 将盐存储在数据库中,以便稍后检索(用于验证 PSWD)

这让我开始思考......如果黑客知道你的盐(因为它存储在数据库中的某个地方,可能是一个名为 this_is_not_the_salt_ur_looking_for 的列或其他同样模糊的东西)他们可以重新生成密码字典并获得访问权限。

然后我有了一个主意。如果您将盐存储在散列密码字段会怎么样。因此,按照步骤 1-4(随机生成盐),然后在步骤 5 中,将盐插入密码解释类或服务已知的某个位置的密码中:

xxxxxsaltvaluexxxxxxxxxxxxxxxx

其中 x 是哈希字符串值。任何人都可以看到任何问题吗?完全没有必要吗?

答案:
没有理由不能做到这一点。正如 Yahia 所说,保护密码的其他方法包括双重(或 n)哈希。另一方面,BCrypt 看起来是一种几乎可以完全阻止暴力攻击的好方法,但我找不到 C# 的可信库

谢谢!
时差

最佳答案

从安全的角度来看,只要您只存储散列密码(永远存储明文密码!)加上盐就没有必要......攻击者是“允许” 了解盐分 - 您的安全设计方式必须确保即使知道盐分,它仍然是安全的。

盐有什么作用?

Salt 使用预先计算的“彩虹表”帮助抵御暴力攻击。
Salt 使暴力破解对攻击者来说成本更高(以时间/内存计算)。
计算这样一个表是昂贵的,通常只有当它可以用于多个攻击/密码时才会这样做。
如果您对所有密码使用相同的盐,攻击者可以预先计算出这样的表格,然后将您的密码强制转换为明文...
只要您为每个要存储其哈希值的密码生成一个新的(密码学强度最好的)随机盐就没有问题。

至于你“伪装”盐的想法
这更像是应该避免的“默默无闻的安全”
虽然在这种情况下,我看不到任何积极或消极的影响。

如果您想进一步加强安全性
您可以多次计算哈希值(哈希哈希值等) - 这不会花费您太多,但它会造成暴力攻击/计算“彩虹表”更加昂贵......请不要发明自己- 有行之有效的标准方法,参见示例 http://en.wikipedia.org/wiki/PBKDF2http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

关于c# - 散列和加盐密码字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7103717/

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