【问题标题】:Upgrading from SHA1 to SHA2 breaks everything in C# application从 SHA1 升级到 SHA2 会破坏 C# 应用程序中的所有内容
【发布时间】:2023-03-02 23:58:01
【问题描述】:

我的任务是进行 checkmarxwhitehat 哨兵安全修复。问题是从 SHA1 更改为 SHA2 不会自动工作。 哈希 不会 匹配数据库表中的所有数百个用户密码

我该怎么做,让每个人更改他们的密码

C# 代码更改:

//SHA1 sha = SHA1.Create();
SHA256 sha = SHA256Managed.Create();

byte[] buff = sha.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));

【问题讨论】:

  • 嗯,不,更大的哈希不需要不同的密码。您只需识别现有密码一次。拥有它后,您可以使用旧哈希进行身份验证,生成新哈希并删除旧哈希。不要在互联网上听取陌生人的安全建议。
  • 好点,你并不陌生。

标签: c# security sha1 sha256 sha


【解决方案1】:

众所周知,散列是单向的,这意味着无法将其解密回原始值,并且在不知道原始值的情况下无法进行任何转换。甚至 SHA2 也具有“不同”且更高级的散列算法。

一个不好的选择是,对在 SHA2 之前注册的用户进行不同的标记。但是,使用旧 SHA1 的用户可能会受到黑客攻击,例如使用 SHA1 时 LinkedIn 网站被黑客入侵。

我的想法和你一样。就像我们在大型网站看到密码更改建议一样,只需简单地验证旧密码并从用户那里获取新密码。

像 PWDTK 这样属于 SHA2 的 Nuget 包可能会有所帮助..

【讨论】:

  • 我认为 Hans Passant 在评论中的想法是正确的,按照他的想法,将旧密码与用户输入的散列值进行比较,如果它们是正确的,则添加一个代码来散列用户的输入使用 SHA2 并将这个新的散列值更新为新列。我建议创建新列,因为如果您使用旧密码列保存新散列的密码,旧密码和新密码会混合,并且很难知道升级到 SHA2 完成的时间点或不是。祝你编程愉快!
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多