C# 加密数据库sql窗体中存在的密码
我有一个登录名和密码数据库。我不希望任何有权访问数据库的人都能看到每个人的密码。如何加密数据库中的密码 换句话说,我希望在数据库中对字段pwd(password)进行加密,但当我在LoginForm中输入它时,它会自动解密 我发现了一种加密字符串输入的方法,但它不能解决我的问题C# 加密数据库sql窗体中存在的密码,c#,sql,winforms,encryption,C#,Sql,Winforms,Encryption,我有一个登录名和密码数据库。我不希望任何有权访问数据库的人都能看到每个人的密码。如何加密数据库中的密码 换句话说,我希望在数据库中对字段pwd(password)进行加密,但当我在LoginForm中输入它时,它会自动解密 我发现了一种加密字符串输入的方法,但它不能解决我的问题 static string Encrypt(string value) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()
static string Encrypt(string value)
{
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
UTF8Encoding utf8 = new UTF8Encoding();
byte[] data = md5.ComputeHash(utf8.GetBytes(value));
return Convert.ToBase64String(data);
}
}
private void BtnEncrypt_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtPass.text))
{
MessageBox.Show("Please enter your password !");
}
texResult.Text=Encrypt(txtPass.Text);
}
拜托,谁能帮帮我。提前感谢。您可以使用加密功能对密码进行加密,并将加密后的密码存储在数据库中。 但是解密密码不是一个好的选择。密码加密应该是一种方式 要检查数据库中是否有密码,可以使用相同的加密功能加密用户输入的密码,然后将该加密密码与数据库中的加密密码匹配
谢谢您可以使用加密功能对密码进行加密,并将加密后的密码存储在数据库中。 但是解密密码不是一个好的选择。密码加密应该是一种方式 要检查数据库中是否有密码,可以使用相同的加密功能加密用户输入的密码,然后将该加密密码与数据库中的加密密码匹配
谢谢您可以使用任何复杂的加密技术来加密密码,并将要保存在数据库中的密码密钥发送给相应的用户。 现在,当客户端尝试登录并输入密码时,会将其发送到服务器 从服务器上,您可以再次转换登录详细信息并计算哈希值,最后发送到存储过程进行比较。如果两个字符串匹配,则返回true或false作为身份验证
using System.Security.Cryptography;
...
...
...
private const string _alg = "HmacSHA256";
private const string _salt = "rz8LuOtFBXphj9WQfvFh"; // Generated at https://www.random.org/strings
public static string GenerateToken(string username, string password)
{
string hash = string.Join(":", new string[] { username, password });
using (HMAC hmac = HMACSHA256.Create(_alg))
{
hmac.Key = Encoding.UTF8.GetBytes(GetHashedPassword(password));
hmac.ComputeHash(Encoding.UTF8.GetBytes(hash));
hash = Convert.ToBase64String(hmac.Hash);
}
return Convert.ToBase64String(Encoding.UTF8.GetBytes(hash));
}
public static string GetHashedPassword(string password)
{
string key = string.Join(":", new string[] { password, _salt });
using (HMAC hmac = HMACSHA256.Create(_alg))
{
// Hash the key.
hmac.Key = Encoding.UTF8.GetBytes(_salt);
hmac.ComputeHash(Encoding.UTF8.GetBytes(key));
return Convert.ToBase64String(hmac.Hash);
}
}
您可以使用任何复杂的加密技术来加密密码,并将要保存在数据库中的密码密钥发送给相应的用户。 现在,当客户端尝试登录并输入密码时,会将其发送到服务器 从服务器上,您可以再次转换登录详细信息并计算哈希值,最后发送到存储过程进行比较。如果两个字符串匹配,则返回true或false作为身份验证
using System.Security.Cryptography;
...
...
...
private const string _alg = "HmacSHA256";
private const string _salt = "rz8LuOtFBXphj9WQfvFh"; // Generated at https://www.random.org/strings
public static string GenerateToken(string username, string password)
{
string hash = string.Join(":", new string[] { username, password });
using (HMAC hmac = HMACSHA256.Create(_alg))
{
hmac.Key = Encoding.UTF8.GetBytes(GetHashedPassword(password));
hmac.ComputeHash(Encoding.UTF8.GetBytes(hash));
hash = Convert.ToBase64String(hmac.Hash);
}
return Convert.ToBase64String(Encoding.UTF8.GetBytes(hash));
}
public static string GetHashedPassword(string password)
{
string key = string.Join(":", new string[] { password, _salt });
using (HMAC hmac = HMACSHA256.Create(_alg))
{
// Hash the key.
hmac.Key = Encoding.UTF8.GetBytes(_salt);
hmac.ComputeHash(Encoding.UTF8.GetBytes(key));
return Convert.ToBase64String(hmac.Hash);
}
}
MD5不再安全 当用户注册使用您的应用程序时,请使用salt将密码与SHA512位进行散列。您可以找到类似PWDTK nuget的软件包,我们可以轻松使用。密码是什么,我们不需要知道它的意思,但只是扮演一个安全的角色。就像上面提到的一些人一样,当用户注册后尝试登录时,只需加密用户的输入(密码),并将其与SQL数据库中注册的密码进行比较。密码必须是单向的 登录结果显示成功或失败后,密码角色完成
你可能会在以后的阶段考虑这些问题。
MD5不再是安全的。< /P> 当用户注册使用您的应用程序时,请使用salt将密码与SHA512位进行散列。您可以找到类似PWDTK nuget的软件包,我们可以轻松使用。密码是什么,我们不需要知道它的意思,但只是扮演一个安全的角色。就像上面提到的一些人一样,当用户注册后尝试登录时,只需加密用户的输入(密码),并将其与SQL数据库中注册的密码进行比较。密码必须是单向的
登录结果显示成功或失败后,密码角色完成你可以在以后的阶段考虑这些问题。 < P>很容易用散列加密加密。你要问的是加密-加密让你把你的密码变成一个明显的随机字符序列,然后可以解密得到原始密码回来。您应该使用(有些人建议)散列 有很多关于如何在网上进行加密/解密的例子,只需搜索即可。这是我想到的第一个:虽然从那里复制和粘贴代码很诱人,但我不会,因为这不是你应该做的。在数据库中存储用户密码时,使用密码哈希(使用salt)比存储加密密码要好得多。为什么?因为如果你的系统遭到黑客攻击,攻击者就不可能恢复用户的密码——你的所有帐户都可能会受到威胁,但鉴于人们经常在多个系统上使用相同的密码,你就不会危害你的用户
散列是单向函数,因此您无法获取原始密码。当有人想要登录时,您只需生成一个散列,然后将其与存储在数据库中的散列进行比较。如果您想了解更多关于这方面的信息以及为什么要使用它,那么这是一个很好的开始:如果您想加入并获得一些工作代码,那么请看一看。加密和哈希很容易混淆。你要问的是加密-加密让你把你的密码变成一个明显的随机字符序列,然后可以解密得到原始密码回来。您应该使用(有些人建议)散列 有很多关于如何在网上进行加密/解密的例子,只需搜索即可。这是我想到的第一个:尽管从那里复制和粘贴代码很诱人,