gpt4 book ai didi

C# AES : Encrypt a file causes "Length of the data to encrypt is invalid." error

转载 作者:行者123 更新时间:2023-12-02 05:00:30 25 4
gpt4 key购买 nike

我有一个 PDF 文件。
当我想使用低于 要加密的数据长度无效。 的代码对其进行加密时,发生错误:

  string inputFile = @"C:\sample.pdf";
string outputFile = @"C:\sample_enc.pdf";

try
{
using (RijndaelManaged aes = new RijndaelManaged())
{
byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
byte[] iv = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

aes.Key = key;
aes.IV = iv;

aes.Mode = CipherMode.CFB;
aes.Padding = PaddingMode.None;
aes.KeySize = 128;
aes.BlockSize = 128;

using (FileStream fsCrypt = new FileStream(outputFile, FileMode.Create))
{
using (ICryptoTransform encryptor = aes.CreateEncryptor(key,iv))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
{
using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
{
int data;
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
}
}
}
}
}
}
catch (Exception ex)
{
// Length of the data to encrypt is invalid.
Console.WriteLine(ex.Message);
}


使用 CipherMode.CBCPaddingMode.PKCS7,我没有任何错误。
但由于我的客户,我必须使用AES/CFB无填充来加密文件。

知道这里发生了什么吗?

最佳答案

分组密码期望输入的长度是分组大小的倍数。使用 AES,输入的长度必须是 16 的倍数。

您必须对明文应用某种填充才能满足此要求。 PKCS#7 填充是最佳选择。

然而,转念一想,CFB 模式将分组密码变成了流密码。流密码不需要填充。 .NET 实现在这方面似乎已被破坏。

关于C# AES : Encrypt a file causes "Length of the data to encrypt is invalid." error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com