Base-64 char数组的长度无效

时间:2013-05-23 11:06:04

标签: c# encryption

我试图在Visual Studio 2010中使用C-Sharp语言解密密码但是我坚持这个错误我尝试了这边提供的所有解决方案但我的错误没有解决我如何加密密码可以任何人告诉我使用MD5我的代码是,现在它给出另一个错误“字符串引用未设置为字符串的实例。* 参数名称: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;
            }



            }

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

我认为您对如何处理密码安全感到困惑。密码不会被加密,它们会被散列。这是一种单向加密。相同的密码将始终产生相同的哈希,但允许不同的密码生成相同的哈希,因此无法将其从哈希解密为密码。

虽然起初听起来不太有用,但重点是你从未真正存储过加密或不加密的密码。您存储密码的哈希值。这样你知道当有人输入密码时,它会被哈希并匹配存储的哈希值,这是正确的密码......而不知道密码是什么

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

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