C# AES加密-加密字节
我正在尝试用Aes加密字节。然而,我得到的输出真的很奇怪。这是我的函数(加密和解密)。我做错什么了吗C# AES加密-加密字节,c#,encryption,aes,C#,Encryption,Aes,我正在尝试用Aes加密字节。然而,我得到的输出真的很奇怪。这是我的函数(加密和解密)。我做错什么了吗 public static byte[] encryptStream(byte[] plain, byte[] Key, byte[] IV) { byte[] encrypted; ; using (MemoryStream mstream = new MemoryStream()) { using (AesCry
public static byte[] encryptStream(byte[] plain, byte[] Key, byte[] IV)
{
byte[] encrypted; ;
using (MemoryStream mstream = new MemoryStream())
{
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(mstream,
aesProvider.CreateEncryptor(Key, IV), CryptoStreamMode.Write))
{
cryptoStream.Write(plain, 0, plain.Length);
}
}
encrypted = mstream.ToArray();
}
return encrypted;
}
public static byte[] decryptStream(byte[] encrypted, byte[] Key, byte[] IV)
{
byte[] plain;
using (MemoryStream mStream = new MemoryStream())
{
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(mStream,
aesProvider.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
{
cryptoStream.Read(encrypted, 0, encrypted.Length);
}
}
plain = mStream.ToArray();
}
return plain;
}
问题出在
decryptStream()
方法中,当您从加密的缓冲区中读取加密流时。调用Read()
时,您已经在读取加密的缓冲区,因为您使用内存流对其进行了包装。您希望读入一个新的缓冲区,该缓冲区连接在一起将是解密的字节
public static byte[] decryptStream(byte[] encrypted, byte[] Key, byte[] IV)
{
byte[] plain;
byte[] buffer = new byte[32768];
int totalRead = 0;
MemoryStream plainStream = new MemoryStream();
using (MemoryStream mStream = new MemoryStream(encrypted))
{
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(mStream,
aesProvider.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
{
while (true)
{
int read = cryptoStream.Read(buffer, 0, encrypted.Length);
if (read == 0)
break;
else
plainStream.Write(buffer, totalRead, read);
totalRead += read;
}
}
}
plain = plainStream.ToArray();
}
return plain;
}
非常感谢你。成功了。我想这是一个愚蠢的错误:)