C#:AES错误:填充无效,无法删除.相同的钥匙和一切,帮助
我对C#很陌生,所以请耐心等待我.我知道这个问题在很多时候被问了很多,但是我找不到问题的答案.
我正在保存一些数据,在将其写入文件之前,我将其转换为二进制文件并将其存储在数组中,我将其加密然后写入文件.我以块(32字节)加密数据.以同样的方式,我以32字节的块读取数据,然后解密该数据,然后这应该重复,直到文件结束.但是当涉及到解密时,会抛出以下错误:
我使用相同的密钥和iv(硬编码直到我工作) 这是我的加密代码,没有问题: //result byte[] data = new byte[32]; //setup encryption (AES) SymmetricAlgorithm aes = Aes.Create(); byte[] key = { 145,12,32,245,98,132,214,6,77,131,44,221,3,9,50}; byte[] iv = { 15,122,5,93,198,31,39,241,49,250,188,80,7 }; ICryptoTransform encryptor = aes.CreateEncryptor(key,iv); FileStream fStream = new FileStream(file,FileMode.OpenOrCreate,FileAccess.Write,FileShare.Read,1024,false); //prepare data to write (byte array 'data') ... //encrypt MemoryStream m = new MemoryStream(); using (Stream c = new CryptoStream(m,encryptor,CryptoStreamMode.Write)) c.Write(data,data.Length); data = m.ToArray(); fStream.Write(data,data.Length); 这是我的解密代码: FileStream fStream = new FileStream(fileName,FileMode.Open,FileAccess.Read,4096,false); //setup encryption (AES) SymmetricAlgorithm aes = Aes.Create(); byte[] key = { 145,50 }; byte[] iv = { 15,7 }; ICryptoTransform decryptor = aes.CreateDecryptor(key,iv); //result byte[] data = new byte[32]; //loop for reading the whole file ... int len = fStream.Read(data,32); //decrypt MemoryStream m = new MemoryStream(); using (Stream c = new CryptoStream(m,decryptor,CryptoStreamMode.Write)) c.Write(data,data.Length); //The exception is thrown in this line data = m.ToArray(); //using the decrypted data and then looping back to reading and decrypting... 我尝试了所有我能想到的(这不是很多,因为我对密码学很新),我到处搜索,我找不到解决问题的方法.我还在Nutshell中帮助自己学习了C#这本书. 如果有人知道为什么会发生这种情况我会非常感激,因为我没有想法. 谢谢你的时间和答案. 编辑: 注意:我不能直接使用其他流,因为我需要控制输出格式,我相信它在内存中加密也更安全,更快. 解决方法
根据您的编辑:
如果加密数据是48个字节,那比原始数组大16个字节.这是有道理的,因为算法使用填充数据,因为默认值是PKCS7(即使大小与块大小匹配,因为它填充到块大小的下一个倍数).如果您希望将其保留为32字节,只需将Padding更改为None即可 aes.Padding = PaddingMode.None; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |