我有一个非常简单的加密和解密代码。但是,当我加密解密时,输出并不是我最初输入的输出。
这是加密:
static byte[] Encrypt(SymmetricAlgorithm aesAlg, string plainText)
{
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return msEncrypt.ToArray();
}
}
}
解密:
static string Decrypt(SymmetricAlgorithm aesAlg, byte[] cipherText)
{
ICryptoTransform decryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
Main:
public static void Main()
{
string original = "My secret data!";
using (SymmetricAlgorithm symmetricAlgorithm = new AesManaged())
{
byte[] encrypted = Encrypt(symmetricAlgorithm, original);
string roundtrip = Decrypt(symmetricAlgorithm, encrypted);
Console.WriteLine("Original: {0}", original);
Console.WriteLine("RoundTrip: {0}", roundtrip);
}
}
产出应是:
Original: My secret data!
RoundTrip: My secret data!
然而,它的结果是:
Original: My secret data!
RoundTrip: ">�����6dB&JD䮦�L�ܹ�SKo\v*.�"
或者其他类似的有趣的事情。
我在网上找不到任何有用的东西。如有任何建议,将不胜感激。
发布于 2014-12-09 17:31:34
问题在于,在您的Decrypt
方法中,您创建了另一个加密器,而不是Decryptor
!
如果你改变了路线
aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
至
aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
然后你会得到被欺骗的文本。
发布于 2014-12-09 17:36:42
解密码
static string Decrypt(SymmetricAlgorithm aesAlg, byte[] cipherText)
{
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
https://stackoverflow.com/questions/27384674
复制相似问题