Преобразование TurboPower Lockbox 2 в LockBox 3

В настоящее время я нахожусь в процессе преобразования проекта (который использует шифрование) из Delphi 6 в XE. В этом проекте используется старый Delphi Encryption Compendium, который не работает в XE. Таким образом, я решил, что я бы поменялся с этого компонента на LockBox. Существует две версии LockBox - 2 и 3. У меня нет проблем с использованием LockBox2 в Delphi 6. Я подумал, что я бы использовал LockBox3 в XE, но проблема в том, что я не могу получить те же результаты при использовании с Демонстрационная программа ExFile (из LockBox2).

В этой демонстрации я выбрал алгоритм Blowfish, установил пароль 'testkey' без кавычек, и программа зашифрует файл.

В Delphi XE я опустился на форму

Codec1: TCodec;
CryptographicLibrary1: TCryptographicLibrary;

и связал Codec1 с CryptographicLibrary1, и при нажатии кнопки выполняется следующий код (найден похожий код на сайте LockBox3 для дешифрования строк)....

  codec1.StreamCipherId := BlockCipher_ProgId;
  codec1.BlockCipherId := Blowfish_ProgId;
  codec1.ChainModeId := ECB_ProgId;
  codec1.Password := 'testkey';
  codec1.encryptFile('d:\tools\mingw\bin\md5.exe', 
   'd:\tools\mingw\bin\md5_xe_2.exe');

Но конечный результат заключается в том, что выходной файл имеет размер, отличный от того, что был в демонстрационной версии LockBox2 ExFile.

Так что мои вопросы....

  1. Что я сделал неправильно в приведенном выше коде XE, так что я дал другой результат для демонстрации ExFile от LockBox2?

  2. Должен ли я просто использовать LockBox2 в XE?

  3. Относится к 2, есть ли кто-то ищет код LockBox2 (для XE)?

Будем очень благодарны любой помощи.

С Уважением,

1 ответ

  1. Пользователь "mj2008" ударил ногтем по голове. Delphi 6 использует ansistring в качестве строки. Delphi XE использует UTF-16LE. Тот же пароль, который выдается на экране или вводится с клавиатуры, представляет собой совершенно другое значение, поэтому результаты, естественно, будут другими.

О предполагаемых размерах файлов. Blowfish - это 8-байтовый (64-битный) шифр в блочном режиме. Хотя это будет отличаться для других режимов цепочки, ECB использует заполнение блоков для дополнения последнего блока. TPLB3 использует схему заполнения RFC1321 для ECB, то есть дополняет сообщение одним байтом $80, за которым следует достаточно нуля, чтобы получить полный размер блока. TPLB2 использует другую схему: он дополняется нулями до последнего байта, который он устанавливает в число предварительно заполненных байтов в блоке упаковки.

Таким образом, если ваш текстовый файл имеет размер байтов X и если вы шифруете с помощью Blowfish/ECB, то размер зашифрованного текста Y должен быть:

Y = X + 8 - (X мод 8)

(Для получения более подробной информации обратитесь к ветке форума: http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=154&topics_offset=2&topics_sort_mode=lastPost_desc&forumId=2).

*2. С учетом того, что я ничего не знаю о цели и контексте вашей программы и что конкретные обстоятельства могут повлиять на этот вопрос, я бы сказал, используйте TurboPower LockBox 3 для вашей программы Delphi XE. Если вам необходимо взаимодействовать со старым зашифрованным текстом LB2, то напишите и выполните разовую программу преобразования для преобразования зашифрованного текста LB2 в зашифрованный текст LB3. Затем откажитесь от LB2.

* 3. Я продолжаю поддерживать LB2, но я исправлю только основные обнаруженные дефекты в LB2, и я не буду исправлять компонент RSA в LB2.

Другие вопросы по тегам