如何在C#代码中管理私有数据?

时间:2014-05-20 13:53:51

标签: c# wpf security cryptography

我正在制作一个WPF C#应用程序,从我在许多论坛上的其他线程上读到的内容,可以从.exe文件重建C#应用程序的代码。

现在我的代码中有一个包含数据库登录数据的字符串,我也在考虑使用simmetric加密技术将加密密码发送到数据库,因此客户端的代码将包含simmetric密钥,但是这个问题将使我所有的努力都无法成为一个安全的应用程序。

如何解决这个安全问题,特别是在我的情况下?

1 个答案:

答案 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