C# Base-64字符数组的长度无效
我试图在visual studio 2010中使用C-Sharp语言解密密码,但我遇到了这个错误我尝试了这方面提供的所有解决方案,但我的错误没有解决我如何加密密码任何人都可以告诉我使用MD5我的代码是什么,现在它给出了另一个错误“字符串引用未设置为字符串的实例。*参数名称:s”我能做什么?我不明白。我是C#*的新手。如果我浪费了你的时间,我不知道我能做什么,那么很抱歉C# Base-64字符数组的长度无效,c#,encryption,C#,Encryption,我试图在visual studio 2010中使用C-Sharp语言解密密码,但我遇到了这个错误我尝试了这方面提供的所有解决方案,但我的错误没有解决我如何加密密码任何人都可以告诉我使用MD5我的代码是什么,现在它给出了另一个错误“字符串引用未设置为字符串的实例。*参数名称:s”我能做什么?我不明白。我是C#*的新手。如果我浪费了你的时间,我不知道我能做什么,那么很抱歉 public string PasswordDecrypt(string sQueryString)
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;
}
}
我想你对如何确保密码安全感到困惑。密码不会被加密,而是会被散列。这是一种单向加密。相同的密码总是会产生相同的散列,但不同的密码可以生成相同的散列,因此不可能在不同的散列中解密 虽然一开始听起来没什么用,但关键是你从来没有真正存储密码,不管是否加密。你存储密码的散列值。这样你就知道当有人输入密码时,它会被散列并与存储的散列相匹配,这是正确的密码…而不知道密码是什么 因此,您无法解密散列。您只需对输入进行散列,并与正确密码中较早的散列进行比较
请注意,您还应该使用google
Salting
hash,这是一种在数据存储被破坏并且潜在攻击者知道散列后降低散列攻击面的技术。与您的问题相关的代码如下:
string sQueryString = txtPassword.Text;
byte[] buffer = Convert.FromBase64String(sQueryString);
为此创建一个测试用例,其中包含当您收到错误时输入的数据。也许您的用户没有将其密码作为base64输入。请将这堵代码墙缩短为一个10-15行的简短完整程序,以演示问题。我们不想费力地完成所有不需要看到的内容。错误在哪里?md5 doesn不做加密,它是散列。@Ankush散列是单向加密。@CodeCaster然后,MD5不是加密,而是一个散列函数。加密的定义是:转换为密文,可以重新转换为原始状态。@Raheel这是因为“786”不是base64字符串(有效字符,但长度不正确)。您转储了大量代码并说它不起作用。请在问题中解释此代码的作用。