-6

我尝试使用 C-Sharp 语言在 Visual Studio 2010 中解密密码,但我遇到了这个错误现在它给出了另一个错误“字符串引用未设置为字符串的实例。*参数名称:s”我能做什么我无法理解。我是 C# 的新手*。我不知道如果我浪费你的时间我该怎么办那么对不起大家。

     public string PasswordDecrypt(string sQueryString)
        {

            byte[] buffer;
            TripleDESCryptoServiceProvider loCryptoClass = new
            TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider loCryptoProvider = new MD5CryptoServiceProvider();


            try
            {
                buffer = Convert.FromBase64String(sQueryString);
                loCryptoClass.Key = loCryptoProvider.ComputeHash(ASCIIEncoding.ASCII.GetBytes(sQueryString));
                loCryptoClass.IV = lbtVector;
                return ASCIIEncoding.ASCII.GetString(loCryptoClass.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                loCryptoClass.Clear();
                loCryptoProvider.Clear();
                loCryptoClass = null;
                loCryptoProvider = null;
            }



            }
4

2 回答 2

2

与您的问题相关的代码是这样的:

string sQueryString = txtPassword.Text;
byte[] buffer = Convert.FromBase64String(sQueryString);

为此创建一个测试用例,其中包含收到错误时输入的数据。也许您的用户没有将密码输入为 base64。

于 2013-05-23T11:18:00.583 回答
1

我认为您对如何保护密码安全感到困惑。密码不会被加密,它们会被散列。这是一种单向加密。相同的密码总是会产生相同的哈希值,但不同的密码可以生成相同的哈希值,因此不可能将其从哈希值解密为密码。

虽然一开始这听起来没什么用,但关键是您从未真正存储密码,无论是否加密。您存储密码的哈希值。这样你就知道当有人输入密码时,它会被散列并与存储的散列匹配,这是正确的密码......而不知道密码什么。

因此,您无法解密哈希。您只需对输入进行哈希处理,并与正确密码的早期哈希值进行比较。

请注意,您还应该使用谷歌Salting哈希,这是一种在数据存储被破坏并且潜在攻击者已知哈希时降低哈希攻击面的技术。

于 2013-05-23T11:17:40.167 回答