当前位置:编程学习 > C#/ASP.NET >>

C# AES分块加密后为什么不能合并解密

我把密文用AesManagered以32B分块加密后,写入byte[],然后一起解密,得到的结果和原来的明文不一样,但是前32B是一样的。按照理论,应该是可以实现的啊。
(这个分块和AesManaged.BlockSize的分块是不一样的,那个是更进一步的块)
代码如下:

var aes = new AesManaged();
aes.Padding = PaddingMode.None;
aes.Key = Encoding.Default.GetBytes("123456789012345678901234567890ab");
aes.IV = Encoding.Default.GetBytes("1234567890123abc");
byte[] pliantext = new byte[128];
for (int i = 0; i < pliantext.Length; i++)
    pliantext[i] = (byte)(i % 256);
int blockLength = 32; //分成32的块加密
byte[] ciphertext = new byte[pliantext.Length];
//开始分块加密
for (int i = 0; i < pliantext.Length; i += blockLength)
{
    using (var trans = aes.CreateEncryptor())
    using (var ms = new MemoryStream())
    using (var cs = new CryptoStream(ms, trans, CryptoStreamMode.Write))
    {
        cs.Write(pliantext, i, blockLength);
        cs.FlushFinalBlock();  //向cs中写入原文,加密后保存在内存流ms中
        ms.Position = 0;
        ms.Read(ciphertext, i, blockLength); //写入到byte[]中
    }
}
byte[] decrypted = new byte[pliantext.Length];
var ms1 = new MemoryStream();
var trans1 = aes.CreateDecryptor();
var cs1 = new CryptoStream(ms1, trans1, CryptoStreamMode.Write);
cs1.Write(ciphertext, 0, ciphertext.Length); //一次性解密
cs1.FlushFinalBlock();
ms1.Position = 0;
ms1.Read(decrypted, 0, (int)ms1.Length); //写入decrypted数组
//下面开始检查结果
int count = 0; //统计有多少错误的结果,因为明文是0~127,所以很好检查
for (int i = 0; i < decrypted.Length; i++)
    if (decrypted[i] != (byte)(i % 256))
    {
        Console.WriteLine("{0}, {1}", i, decrypted[i]);
        count++;
    }
Console.WriteLine("Count: " + count); //输出有48个错误
Console.ReadKey();
加密 C# AES 解密 --------------------编程问答-------------------- 这么....的问题 当然得分块解密啊 --------------------编程问答--------------------
引用 1 楼 zhuankeshumo 的回复:
这么....的问题 当然得分块解密啊


按照理论是可以合并解密的啊,因为加密时都被分成了16字节的块,合并解密也是一样的 --------------------编程问答-------------------- 你去看google AES加密原理
又不是一个一个字符加密的 
引用 2 楼 yyzhenfei 的回复:
Quote: 引用 1 楼 zhuankeshumo 的回复:

这么....的问题 当然得分块解密啊


按照理论是可以合并解密的啊,因为加密时都被分成了16字节的块,合并解密也是一样的
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,