asp.net - ASP.NET 使用 SHA256 还是 SHA1?

标签 asp.net asp.net-mvc password-protection sha

我正在使用 ASP.NET 4.5 MVC 和 Entity Framework 提供的默认标识内容。我可以使用密码创建用户,并且散列密码显示在数据库中。我试图弄清楚该哈希是使用不再受信任的 SHA1 算法还是 SHA2 算法(无论是 SHA256、SHA512 等)生成的。

似乎说它默认为 SHA256 的文章:

https://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770148

http://kosmisch.net/Blog/DotNetEssential/Archive/2015/2/1/aspnet-membership-default-password-hash-algorithms-in-net-4x-and-previous-versions.html

似乎说它默认为 SHA1 的文章:

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/password-hashing

https://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

当我沿着链向下时,我最终进入 PasswordHasher.cs 类 -> HashPassword() -> Crypto.HashPassword() 我可以看到它使用的是 Rfc2898DeriveBytes,然后有一堆关于 HMACSHA1 的东西。

那么我的密码是否被 SHA256 或 SHA1 散列?默认为 SHA256 的简单方法?

如果有帮助,这是从我的本地环境中获取的虚拟密码:
AIPfkvy5v59jmVZdPpU9QfUMoToCQ+Rp3dBT7m9RwMKZai5/61REkN/0InCtxKPUOQ==

最佳答案

所以看起来答案既不完全是:

来自 ASP.Net Identity Source Code 中的评论

Version 0: PBKDF2 with HMAC-SHA1, 128-bit salt, 256-bit subkey, 1000 iterations.

See also: SDL crypto guidelines v5.1, Part III)

Format: { 0x00, salt, subkey }



最终的散列算法是 SHA1,但它不是简单的密码 SHA1 散列,甚至不是 SHA1 + 盐散列。

值得指出的是,由于数学攻击,SHA1 被认为是数字签名的“破坏”,从而将产生碰撞的计算工作量减少到几乎可行的水平。

这不适用于散列密码。

进一步阅读的链接。

Is SHA-1 secure for password storage?

https://www.schneier.com/blog/archives/2005/02/sha1_broken.html

https://en.wikipedia.org/wiki/PBKDF2

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

Rfc2898DeriveBytesHMACSHA1

关于asp.net - ASP.NET 使用 SHA256 还是 SHA1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40624840/

相关文章:

asp.net - 在 Web 表单应用程序中使用 Razor View 作为电子邮件模板

jquery - 如何在ListBox中加载大量数据? ASP.NET MVC 应用程序

android - 卸载密码

wordpress - 使用 WPS 隐藏登录插件后,我被 WordPress 锁定

c# - asp.net cron job quartz.net 错误,不总是触发

mysql - 如何安全地存储密码以备后用

javascript - 使用 jquery/javascript 在 aspx 页面中使用服务器端下拉列表填充客户端下拉列表

c# - asp.net updatePanel PostBackTrigger 触发全回发

c# - 为什么 NameValueCollection 的行为不同?

javascript - 删除页面重新加载时的查询字符串