Преобразование текста шифра Lockbox2 в текст шифра Lockbox3 - PullRequest
1 голос
/ 22 марта 2012

Есть ли способ, которым я могу преобразовать мой текст Lockbox 2 Cipher в текст LockBox 3 Cipher. Мы переносим наше приложение, построенное на Delphi 2007, на Delphi xe2, мы использовали алгоритм шифрования RSA Lockbox 2 в Delphi 2007 и намереваемся использовать lockbox 3 в Delphi xe2 для поддержки данных Unicode. поскольку зашифрованный текст, сгенерированный ими обоими, отличается, поскольку Xe2 поддерживает данные Unicode, мы сталкиваемся с проблемой. Поэтому мы бы хотели как-то преобразовать зашифрованный текст, сгенерированный Lockbox 2, в LockBox 3.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Поскольку ваш зашифрованный текст по определению не распознается, нет простого способа определить, были ли базовые данные открытого текста Ansi или Unicode .... поэтому вам, вероятно, нужно управлять новым связанным свойством.

Очевидно, что это зависит от макета вашего приложения и от того, где хранятся эти данные, и от того, как будут обновляться клиенты, но может существовать какой-либо флаг новой версии, связанный с сохраненным зашифрованным текстом.Если это в локальной таблице, скажем, добавьте новый столбец для PlainTextVersion и установите версию в какое-то значение, чтобы указать, что зашифрованный текст был сохранен из открытого текста Unicode.Когда вы читаете зашифрованный текст, и это новое поле не соответствует флагу Unicdoe, вы можете обновить зашифрованный текст, расшифровав и зашифровав его с помощью открытого текста Unicode, а затем повторно сохранить зашифрованный текст и установить новый флаг (или просто отменить шифротекстобновление версии до тех пор, пока не будет изменен открытый текст, и его необходимо будет обновить.)

Или, что еще лучше, автоматически обновите весь текущий зашифрованный текст за один раз, если это возможно.

1 голос
/ 28 июля 2016

Для преобразования было бы проще использовать Lockbox 2 для расшифровки вашего зашифрованного текста и использовать Lockbox 3 для его повторного шифрования.

Причина в том, что из того, что я могу сказать, Lockbox 2 заточил реализациюзаполнение блока RSA типа 2 , означающее, что шифрование RSA в Lockbox 2 несовместимо с расшифровкой RSA кого-либо еще.

Шифрование RSA в Lockbox 2 неправильно выводит сообщение следующим образом (определяется путем помещенияточка останова и проверка памяти в biBlock.Fi.IntBuf.pBuf):

message-bytes 0x00 random-padding-bytes 0x02 0x00

например, 'test' дополняется до:

$01C883AC  74 65 73 74 00 D4 50 50  test..PP 
$01C883B4  A7 BO E5 51 7A 4C C2 BC  ...QzL.. 
$01C883BC  8C B8 69 8A 97 DF AA 1D  ..I..... 
$01C883C4  78 67 1E OE 8B AB 02 00  xg...... 

Но это должнобыть дополненным (например, посмотрите на этот обработанный пример ):

0x00 0x02 random-padding-bytes 0x00 message-bytes

Lockbox 2 не просто хранит байты в обратном порядке (в противном случае сообщение "test "также будет перевернутым) или обратным 32-битным прямым порядком байтов (в противном случае также будет поменяться местами 02 00).Все работает до тех пор, пока вы используете Lockbox 2 для шифрования и дешифрования.

Также я заметил еще одну ошибку, когда Lockbox 2 вызывает e.RandomSimplePrime () для генерации открытого показателя e, но он генерирует четное число, то есть довольнозаслуживающая внимания ошибка в RandomSimplePrime (), а?Я только посмотрел на Lockbox 2.07.Lockbox 3 был полностью переписан, поэтому в нем не будет этих ошибок.

...