2013-04-26 2 views
1

Я реализовал класс для шифрования PDF-файлов с использованием .NET framework, как описано в примере here. Он использовал алгоритм AESManaged для шифрования.Шифрование PDF с использованием .NET framework

Этот метод работает отлично, и я смог зашифровать документ. Но моя проблема в том, что я не смог открыть этот файл, используя любой просмотрщик PDF. По моим сведениям, с помощью любого PDF-редактора, совместимого с AES, мы должны иметь возможность открыть 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(); 
    } 
    } 
} 
+1

ошибка в коде? –

+0

Я так не думаю. Я сделал то же самое, что и в примере. См. Обновленный вопрос – nath

+1

(Альтернатива - ошибки во всех зрителях, что очень * сомнительно. Также это может быть не проблема с шифрованием, а с другой обработкой данных. Например, есть нешифрованные заголовки или кадрирование, используемое с зашифрованными PDF-файлами?) – user2246674

ответ

0

Ваш код подразумевает свой подход к этой проблеме был шифровать весь файл PDF. Если это так, то я думаю, что чрезмерное упрощение является причиной вашей проблемы.

Большинство зашифрованных форматов данных имеют форму заголовка или трейлера в виде открытого текста, который позволяет получателям проверять флаги и метаданные, которые помогают с расшифровкой. Основываясь на небольшом анализе, я нашел this page, в котором предлагается, что шифрование PDF ничем не отличается.

Вместо того, чтобы защищать все байты всего документа, этот процесс очень специфичен. Из связанного документа:

Все объекты потока (и строки) в файле PDF зашифрованы. Это достаточно, чтобы сделать файл бесполезным (то есть, если бы он был не таким , то легко расшифровать). Расшифровка потока/строки работает следующим образом:

  1. Возьмите 5-байтовый ключ файла (сверху).

  2. Приобретите 3 младших байта (сначала LSB) номера объекта для дешифрованного потока/строкового объекта.

  3. Приобретите 2 младших байта (сначала LSB) поколения .

  4. MD5 хэш это 10-байтовая цепочка.

  5. Используйте первые 10 байтов вывода в качестве ключа RC4 для дешифрования потока или строки. (Это, по-видимому все еще отвечает экспортные правила США , потому что это 40-битный ключ с дополнительным 40-битном «соль».)

Смежные вопросы