Ost*_*abi 0 c# saltedhash winforms
我有一个带有登录表单的WinForms应用程序,我想将加密的用户名和密码存储在SQLite数据库中。我看到可以使用salt和hash,但是我不知道如何加密代码中的密码,并在进行身份验证时进行比较。
有什么帮助吗?
您将需要使用用户名和密码(从带掩码的文本框中输入密码,最好使用第二个框进行确认)对其进行盐析,并从密码中创建一个哈希,然后在其中插入明文用户名和密码的盐化哈希到数据库。然后,您可以在将来通过将数据库存储的版本与用户输入的盐(相同盐!)哈希值进行比较来验证用户密码。
请注意,每个用户应有自己的盐,您在创建帐户时会随机为该用户生成盐。(这比黑客可以发现的全球盐值更安全)。
看一下这篇文章。它几乎涵盖了所有基础,但是请不要按照本文中的建议使用SHA-1。您需要一个计算量大的慢散列函数,例如BCrypt或PBKDF2(包含在.NET中)。请参阅“什么使密码具有良好的哈希功能”。(感谢@CodeInChaos指出这一点)。
您可以在System.Security.Cryptography中使用Rfc2898DeriveBytes创建PBKDF2样式的密码的加盐哈希。
byte[] salt = Guid.NewGuid().ToByteArray[];
Rfc2898DeriveBytes saltedHash = new Rfc2898DeriveBytes("P@$$w0rd", salt, 1000);
Run Code Online (Sandbox Code Playgroud)
一个好的经验法则是,迭代次数应导致哈希操作花费大约一秒钟的时间。