C # и Delphi. Прочитайте XML в зашифрованном виде и заархивированы в Delphi с C # - PullRequest
2 голосов
/ 18 ноября 2010

У нас есть зашифрованный, а затем заархивированный файл XML-документа.Этот файл зашифрован в Delphi с помощью пакета DcpCrypt с использованием Rijndael и SHA256:

fRijndael:=TDCP_rijndael.Create(nil);
fRijndael.BlockSize:=16;
fRijndael.CipherMode:=cmCBC;
fSHA256:=TDCP_sha256.Create(nil);
fSHA256.HashSize:=256;

Может ли C # расшифровать это?Я много гуглил, и похоже, что DcpCrypt вычисляет свои ключи иначе, чем .NET lib.

Заранее большое спасибо

1 Ответ

3 голосов
/ 19 ноября 2010

Краткий ответ - да.Длинный ответ «это зависит».

Под словами «вычисляет его ключи», я полагаю, вы имеете в виду генерировать ключи шифрования.Как генерируются ключи, совершенно не имеет отношения к процессу использования этих ключей для шифрования и дешифрования.

DcpCrypt был написан до того, как Rijndael стал стандартом AES (это давно).Предполагая, что предстандартная реализация Rijndael такая же, как AES (вероятно, так и есть), совместимость шифрования / дешифрования AES должна быть независимой от языка и реализации, зависящей только от параметров реализации.

Но здесь есть проблема.... определить эти параметры и установить их одинаковые как для кодека шифрования, так и для кодека дешифрования может быть сложно.

Какие есть варианты?

  1. Режим цепочки;
  2. IV
  3. Как посолено сообщение?если вообще?
  4. Завершение: AES не определяет схему блокировки для режимов цепочки без потоковой передачи ключей.
  5. Как правило, с шифрами, отличными от AES, у вас также может возникнуть проблема суказание, как кодируются ключи - но это не должно быть проблемой для AES.

После того, как вы определили все опции, которые использует шифровальщик, вы должны применить те же опции к дешифровщику.Эта проблема не характерна для Rijndael / AES, но универсальна для всех шифров.

Кстати, если вы архивируете для целей сжатия, шифрование, следующее за архивированием, не имеет смысла.Zip не будет сжимать любой файл, содержимое которого уже является максимально случайным, например зашифрованный текст.

Я рекомендую использовать TurboPower LockBox 3 для шифрования в AES, а не DcpCrypt.DCPcrypt Дэйва Бартона был хорош в этот день, но он не соответствует стандартам и не может безопасно управлять IV.

Какие варианты есть, если вы используете LockBox?Если вы используете кодек AES LockBox 3 с режимом CBC, для посола и IV задается одноразовый номер IV и его предварительная выдача.Для сообщений длиннее, чем один блок, блокировка достигается путем кражи зашифрованного текста.Для сообщений короче одного блока режим цепочки принудительно устанавливается на 8-битный CFB, который является потоковой передачей ключей.

Также ваш комментарий о шифровании файла с помощью SHA256 не имеет смысла.SHA - это хэш, а не шифр.

...