我正在制作一个WPF C#应用程序,从我在许多论坛上的其他线程上读到的内容,可以从.exe文件重建C#应用程序的代码。
现在我的代码中有一个包含数据库登录数据的字符串,我也在考虑使用simmetric加密技术将加密密码发送到数据库,因此客户端的代码将包含simmetric密钥,但是这个问题将使我所有的努力都无法成为一个安全的应用程序。
如何解决这个安全问题,特别是在我的情况下?
答案 0 :(得分:-2)
解决方案是在数据库中散列密码而不加密。哈希是字符串的单向转换,无法逆转。
然后,您对用户提供的输入值进行哈希处理,并将其与数据库中的值进行比较。如果哈希匹配,则可以登录,否则将显示错误。
static string GetMd5Hash(MD5 md5Hash, string input)
{
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}
// Verify a hash against a string.
static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
{
// Hash the input.
string hashOfInput = GetMd5Hash(md5Hash, input);
// Create a StringComparer an compare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
从这里MSDN site