我有一个名为CryptoService的服务,它继承了由2个方法Crypto Decrypto函数组成的接口ICryptoService。
字符串加密工作正常但哈希结果的解密将返回我的密钥而不是解密字符串。
这是我的加密代码:
private string _salt = "*1234567890!@#$%^&*()14344*";
private string Crypto(string text)
{
var hashmd5 = new MD5CryptoServiceProvider();
byte[] toEncryptArray = Encoding.UTF8.GetBytes(_salt);
byte[] keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(_salt));
hashmd5.Clear();
TripleDesProvider.Key = keyArray;
TripleDesProvider.Mode = CipherMode.ECB;
TripleDesProvider.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = TripleDesProvider.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
我的解密代码:
private string Decrypto(string text)
{
try
{
var hashmd5 = new MD5CryptoServiceProvider();
byte[] toEncryptArray = Convert.FromBase64String(text);
byte[] keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(_salt));
hashmd5.Clear();
TripleDesProvider.Key = keyArray;
TripleDesProvider.Mode = CipherMode.ECB;
TripleDesProvider.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = TripleDesProvider.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
TripleDesProvider.Clear();
return Encoding.UTF8.GetString(resultArray);
//return Encoding.UTF8.GetString(resultArray);
}
catch
{
return string.Empty;
}
}
这里提供了截图。
以下是我在互联网上找到的代码的参考资料 https://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C
答案 0 :(得分:1)
这不起作用。哈希,例如MD5,是单向的。您无法从哈希值中获取原始文本。
如果你的加密服务在同一台机器上运行,我建议使用Data Protection类。
答案 1 :(得分:0)
您在加密中的toEncryptArray
获取值_salt
。你的意思是text
。
所以,好消息,你的解密工作。