C#2008
我使用以下代码来加密和加密邮件.但是,当我尝试解密时,我收到"错误数据"错误.
我的代码下面有什么问题吗?
非常感谢,
public string encryptText(string text)
{
try
{
TripleDESCryptoServiceProvider encrypt = new TripleDESCryptoServiceProvider();
encrypt.Key = new byte[] { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 };
encrypt.IV = new byte[] { 1, 2, 3, 5, 8, 13, 21, 34 };
byte[] byteText = Encoding.Unicode.GetBytes(text);
ICryptoTransform encryptor = encrypt.CreateEncryptor();
byte[] encryptedText = encryptor.TransformFinalBlock(byteText, 0, byteText.Length);
return Encoding.Unicode.GetString(encryptedText);
}
catch (Exception ex)
{
Console.Write(ex.Message);
return ex.Message;
}
}
/// Decrypt the text
public string decryptText(string encryptedText)
{
try
{
byte[] bytesText = Encoding.Unicode.GetBytes(encryptedText);
TripleDESCryptoServiceProvider decrypt = new TripleDESCryptoServiceProvider();
decrypt.Key = new byte[] { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 };
decrypt.IV = new byte[] { 1, 2, 3, 5, 8, 13, 21, 34 };
ICryptoTransform decryptor = decrypt.CreateDecryptor();
byte[] originalText = decryptor.TransformFinalBlock(bytesText, 0, encryptedText.Length);
return Encoding.Unicode.GetString(originalText);
}
catch (Exception ex)
{
Console.Write(ex.Message);
return ex.Message;
}
}
Run Code Online (Sandbox Code Playgroud)
您正在使用加密的字节并使用它们将它们转换为字符串Encoding.Unicode,但随后您将使用字符串并将其转换回字节Encoding.Default.这几乎可以保证不起作用(除非默认值是UTF-16).
但是,您应该使用其中任何一种 - 使用编码将任意二进制数据转换为文本是一个坏主意.使用Convert.ToBase64String(在加密器中)和Convert.FromBase64String(在解密器中)代替.
(我也非常想知道返回异常消息的智慧,好像它是加密/解密的成功结果,但希望你只是为了示例代码而这样做.)
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |