创建加密的密码并将其存储在sqlite中以用于身份验证

Ost*_*abi 0 c# saltedhash winforms

我有一个带有登录表单的WinForms应用程序,我想将加密的用户名和密码存储在SQLite数据库中。我看到可以使用salt和hash,但是我不知道如何加密代码中的密码,并在进行身份验证时进行比较。

有什么帮助吗?

idl*_*ind 5

您将需要使用用户名和密码(从带掩码的文本框中输入密码,最好使用第二个框进行确认)对其进行盐析,并从密码中创建一个哈希,然后在其中插入明文用户名和密码的盐化哈希到数据库。然后,您可以在将来通过将数据库存储的版本与用户输入的盐(相同盐!)哈希值进行比较来验证用户密码。

请注意,每个用户应有自己的盐,您在创建帐户时会随机为该用户生成盐。(这比黑客可以发现的全球盐值更安全)。

看一下这篇文章。它几乎涵盖了所有基础,但是请不要按照本文中的建议使用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)

一个好的经验法则是,迭代次数应导致哈希操作花费大约一秒钟的时间。