Base-64字符数组的长度无效

本文关键字:无效 字符 数组 Base-64 | 更新日期: 2023-09-27 18:15:04

我试图在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;
            }

            }

Base-64字符数组的长度无效

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

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

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

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

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

所以你不能解密哈希。您只需对输入进行散列,并与正确密码的早期散列进行比较。

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