我即将为我的应用程序制作“登录”,想知道将用户密码加密后存储到数据库中的最佳方法是什么?在Google上找到了很多方法,但不知道哪种方法是最好的。
我即将为我的应用程序制作“登录”,想知道将用户密码加密后存储到数据库中的最佳方法是什么?在Google上找到了很多方法,但不知道哪种方法是最好的。
我建议使用单向哈希加盐。
例如,使用SHA1哈希函数,你可以将密码存储为无法反转回原始密码的哈希值。当用户输入密码时,对其进行相同的SHA1哈希处理,然后将该哈希与存储在数据库中的哈希进行比较,如果匹配,则密码正确。
为了进一步保证哈希的安全性,可以加入“盐”,这实际上是一个为每个用户生成的随机值,然后在创建帐户时将盐值存储在用户记录中。当你创建密码的哈希值时,你首先将密码与盐结合起来,然后对这个组合值进行哈希处理。要验证用户,你需要将输入的密码与存储在用户账号中的盐混合,对组合值进行哈希处理并进行比较。
通过添加盐到哈希中,你可以确保具有相同密码的哈希具有不同的哈希值,因为盐部分不同。因此,即使两个用户具有相同的密码“Password1234”,也不会有相同的存储哈希值,因此不能确定两个用户具有相同的密码。
使用bcrypt。不要自己构建密码哈希方法的想法,使用bcrypt。世界上已经有足够多的自制不安全的密码哈希方案了。
存储加盐的密码哈希值,当然每个用户都有自己的盐,这是非常好的。但是仅仅加盐只能防止彩虹表攻击,无法防止暴力破解。所以,矛盾的是,您不希望使用快速的方法来生成或验证密码哈希值。MD5、SHA等都很快。请跟我重复:使用bcrypt。
System.Security.Cryptography
命名空间中提供了SHA256和SHA512作为内置函数。 - Cody Gray