我即将为我的应用程序进行“登录”,并想知道为我的用户加密密码的最佳方法是什么,我将在我的数据库中输入?我在Google上找到了很多方法,但不知道哪个是最好的。
答案 0 :(得分:8)
我会单程salted hash。
例如,使用SHA1哈希,您可以将密码存储为哈希,无法将其反转回原始密码。然后,当用户输入他/她的密码时,您对密码执行相同的SHA1哈希,并将该哈希与您在数据库中存储的内容进行比较,如果匹配则密码正确。
为了进一步保护散列,您可以添加一个盐,这实际上是您为每个用户生成的随机生成的值,然后您创建帐户,并将salt值存储在用户记录中。在创建密码的哈希值时,首先将密码与salt组合并散列此组合值。要对用户进行身份验证,请将输入的密码与为用户存储的salt结合使用,对组合值执行哈希并进行比较。
通过将salt添加到混合中,可以确保发生的密码的哈希值具有不同的哈希值,因为盐渍部分不同。因此,如果两个用户使用相同的密码“Password1234”,则两者的存储哈希值将不相同,因此无法确定两个用户具有相同的密码。
答案 1 :(得分:3)
我建议使用Rfc2898DeriveBytes
它使用了一个很好的标准化Key-Derivation-Function和现代哈希。除了密码之外,您还需要传入一个盐来防止彩虹表。它为你混合盐和密码,所以你不需要弄清楚如何自己做。
答案 2 :(得分:1)
使用bcrypt。不,真的,放弃你构建自己的方法的任何想法,use bcrypt。世界上已经有足够的自制不安全密码哈希方案了。
存储盐渍密码哈希,当然,每个用户的盐都很好。但盐析只能防止彩虹表攻击,它不会阻止暴力攻击。因此,矛盾的是,您不希望使用快速方法来生成或验证密码哈希值。 MD5,SHA,无论如何 - 它们都很快。在我之后重复:使用bcrypt。
答案 3 :(得分:0)
答案 4 :(得分:-1)