我正在开发一个api项目,将有用户谁将注册和登录和退出移动应用程序。我将使用web api .net core 5开发这个应用程序。我想通过基于有效的jwt令牌登录来处理用户的身份验证。
我的问题是哪种类型的散列适合在数据库中存储散列密码。这里有我一直在看的两种类型,哪一种更安全?
//sha256 method from the system web helpers namespace
var hash1 = Crypto.SHA256("password");
//hashpassword from the system web helpers namespace
var hash2 = Crypto.HashedPassword("12345");
两者都来自microsoft/.net库,所以我的印象是它们都是安全的,但是我注意到有一些网站有sha256的解密机制。我正在向crypto类中的hashhedpassword方法靠拢…
SHA256使用SHA256算法,HashPassword使用RFC 2898。
关于差异,请看这篇文章。
您应该选择HashPassword
,因为它会自动为您生成盐。此外,RFC 2898被认为更安全,因为它故意减慢了速度,这使得暴力破解更加困难。
注意:两者都是散列算法,而不是加密算法,因此两者都不能"解密";通过定义。
我已经看到bcrypt
被推荐了几次作为密码哈希算法,因为它能够在算法中支持不同数量的迭代,以防止当今更强大的cpu/gpu在试图破解它们时攻击它们。
George Stocker的回答非常翔实,其中包括一些很好的资源来阅读这个主题。