【发布时间】:2021-12-16 03:55:15
【问题描述】:
我一直在开发一个离线 Windows 窗体应用程序,该应用程序将登录和注册链接到 SQL 数据库。将用户的密码、电子邮件和用户名存储到本地数据库。
我已经做到了……
public static string Encrypt(string encryptString,string EncryptionKey)
{
byte[] clearBytes = Encoding.Unicode.GetBytes(encryptString);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] {
0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76
});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
encryptString = Convert.ToBase64String(ms.ToArray());
}
}
return encryptString;
}
private static Random random = new Random();
public static string RandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&*+-/";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
在创建帐户(注册)时,将为每个用户随机创建一个加密密钥,并将其存储在数据库中以进行解密(登录)。这是正确的方法吗?如何使用此方法并以安全的方式存储密钥?
我浏览了一些网站和博客,但不明白将用户数据存储到数据库的正确方法是什么,如果是,应该以哪种方式或格式存储?
主要是,
-
我的困惑是我们是否应该只对密码(存储在数据库中)进行哈希处理,并在登录时检查用户密码生成的哈希?
-
大型科技公司如何将密码存储到数据库中?
提前致谢
【问题讨论】:
-
不要发明自己的密码存储方式。密码应使用抗暴力和面向未来的算法进行加盐和哈希处理。有很多关于如何正确存储密码的文章,例如参见storing passwords in .net。
标签: c# winforms encryption hash passwords