我有以下用于加密和解密的代码。问题是,在解密时,除了解密的文本之外,我还会在文本后面加上一些"aaaaa“。为什么?我需要一些帮助。谢谢!
public static byte[] Encrypt(byte[] PlainTextBytes, string key , string InitialVector)
{
try
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] KeyBytes = encoding.GetBytes(key);
byte[] InitialVectorBytes = encoding.GetBytes(InitialVector);
RijndaelManaged SymmetricKey = new RijndaelManaged();
ICryptoTransform Encryptor = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes);
MemoryStream MemStream = new MemoryStream();
CryptoStream CryptoStream = new CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write);
CryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length);
CryptoStream.FlushFinalBlock();
byte[] CipherTextBytes = MemStream.ToArray();
return CipherTextBytes;//描述
public static string Decrypt(byte[] PlainTextBytes1, string key, string InitialVector)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] KeyBytes = encoding.GetBytes(key);
RijndaelManaged SymmetricKey = new RijndaelManaged();
byte[] InitialVectorBytes = Encoding.UTF8.GetBytes(InitialVector);
ICryptoTransform Decryptor = SymmetricKey.CreateDecryptor(KeyBytes, InitialVectorBytes);
MemoryStream MemStream1 = new MemoryStream(PlainTextBytes1);
CryptoStream CryptoStream = new CryptoStream(MemStream1, Decryptor, CryptoStreamMode.Read);
Byte[] pltxt = new byte[PlainTextBytes1.Length];
CryptoStream.Read(pltxt, 0, pltxt.Length);
ASCIIEncoding textConverter = new ASCIIEncoding();
round = textConverter.GetString(pltxt);
return round;
}我哪里错了?
发布于 2011-05-19 15:31:17
在你的decrypt函数中有:
Byte[] pltxt = new byte[PlainTextBytes1.Length];这是错误的,因为cypher文本比纯文本更长,因为它被填充以获得块大小的倍数。
CryptoStream.Read(pltxt, 0, pltxt.Length);Read返回实际返回的字节数。它不能保证返回的字节数与请求的字节数一样多。
然后还有许多其他的缺陷/糟糕的风格:
传递给Decrypt的参数叫做,它应该叫做
Decrypt/ PlainTextBytes1字节一样。在这里,ASCII编码是一个糟糕的选择。ASCII不能表示任何字节字符串。也许你想对一个两倍于instead?应该使用小写名称
https://stackoverflow.com/questions/6055201
复制相似问题