Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SHA1升级到SHA2打破了C#应用程序中的一切_C#_Security_Sha1_Sha256_Sha - Fatal编程技术网

从SHA1升级到SHA2打破了C#应用程序中的一切

从SHA1升级到SHA2打破了C#应用程序中的一切,c#,security,sha1,sha256,sha,C#,Security,Sha1,Sha256,Sha,我的任务是执行checkmarx和whitehat哨兵安全修复。问题是从SHA1更改为SHA2无法自动工作。新的散列不会匹配数据库表中的所有数百个用户密码 我该怎么做,让每个人改变他们的密码 C#代码更改: //SHA1 sha = SHA1.Create(); SHA256 sha = SHA256Managed.Create(); byte[] buff = sha.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd)); 正如您所知,散列是

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

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

C#代码更改:

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

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

正如您所知,散列是单向的,这意味着无法解密回原始值,并且在不知道原始值的情况下,任何内容都无法转换。甚至SHA2也有“不同的”更高级的哈希算法

一个坏的选择是,对在SHA2之前注册的用户进行不同的标记。然而,使用旧SHA1的用户可能会受到黑客攻击,就像LinkedIn网站在使用SHA1时遭到黑客攻击一样

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


像SHA2的PWDTK这样的Nuget包可能会有所帮助。

Hmm,不,更大的散列不需要不同的密码。您只需识别现有密码一次。当您拥有它时,您可以使用旧散列进行身份验证,生成新散列并删除旧散列。不要接受互联网上陌生人的安全建议。说得好,你也不是陌生人。我认为Hans Passant在评论中的想法是正确的,根据他的想法,将旧密码与用户输入的散列值进行比较,如果正确,则添加代码,用SHA2散列用户输入,并将新的散列值更新为新列。我建议创建新列,因为如果使用旧密码列保存新的散列密码,旧密码和新密码将混合在一起,并且很难知道升级到SHA2的时间点是否完成。祝你编程愉快!