C# 使用.NET framework加密PDF
我使用.NET framework实现了一个类来加密PDF,如示例中所述。它使用了C# 使用.NET framework加密PDF,c#,.net,encryption,aes,C#,.net,Encryption,Aes,我使用.NET framework实现了一个类来加密PDF,如示例中所述。它使用了AES管理的算法进行加密 这种方法非常有效,我能够对文档进行加密。但我的问题是,我无法使用任何PDF查看器打开该文件。据我所知,使用任何符合AES标准的PDF查看器,我们应该能够在提供用于加密文档的密钥后打开PDF 我试过使用Adobe 11.0.02、Preview 6.0.1、PDFView 0.14.3、Skim 1.4.3和Google Chrome。但它们都检测到文件已损坏。有人能告诉我怎么了吗 我添加了
AES管理的
算法进行加密
这种方法非常有效,我能够对文档进行加密。但我的问题是,我无法使用任何PDF查看器打开该文件。据我所知,使用任何符合AES标准的PDF查看器,我们应该能够在提供用于加密文档的密钥后打开PDF
我试过使用Adobe 11.0.02、Preview 6.0.1、PDFView 0.14.3、Skim 1.4.3和Google Chrome。但它们都检测到文件已损坏。有人能告诉我怎么了吗
我添加了以下代码:
using (AesManaged aesAlg = new AesManaged())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
您的代码暗示您解决此问题的方法是加密整个PDF文件。如果是这样的话,那么我认为过度简化是你问题的原因 大多数加密数据格式都有某种形式的明文头或尾,允许接收者检查有助于解密的标志和元数据。基于一个简短的研究,我发现这表明PDF加密也没什么不同 该过程非常具体,而不是对整个文档字节进行全面加密。从链接的文档中: PDF文件中的所有流(和字符串)对象都是加密的。这 足以使文件无用(即,如果不是这样的话) 易于解密)。流/字符串解密的工作原理如下:
我不这么认为。我的做法与示例中提到的完全相同。请参阅更新的问题(另一个问题是所有查看器中都存在bug,这是非常可疑的。另外,这可能不是加密问题,而是数据的其他处理问题。例如,是否存在未加密的头或加密PDF使用的帧?)实际上代码中可能存在bug。但我在这个例子中也是这样做的@user2246674我实际上不知道.NET framework实现ESMANAGED算法的方式。@ganuke AES是AES。只要使用了正确的参数(例如IV、mode),那么它将与任何其他有效的AES实现一样工作。当然,另一点是确保使用相同的(填充的)关键策略。(我有一种感觉,发布的答案包含了原始加密不起作用的基础;如果加密错误,我会想象PDF以一种非常无用的方式显示,或者显示一个更具体的加密错误。)