LockBox3 - шифровать в Delphi и расшифровывать с помощью openSSL - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь использовать LockBox 3.7.0 для шифрования файлов, расшифрованных с помощью этой команды OpenSSL:

C: \ OpenSSL-Win64> openssl des-ede3 -d -a -in encoded_file . xml -out plain_file. xml -K 123456789012345678901234567890123456789012345678 -iv 0 -p

Вот моя попытка:

KeyBin:=TMemoryStream.Create;
Codec1 := TCodec.Create( nil);
// Codec1.OnSetIV := codecMainDemoSetIV;
CryptographicLibrary1 := TCryptographicLibrary.Create( nil);
Codec1.CryptoLibrary  := CryptographicLibrary1;
Codec1.StreamCipherId := BlockCipher_ProgId;
Codec1.BlockCipherId  := TripleDES_ProgId;
Codec1.ChainModeId    := CBC_ProgId;
Codec1.Password := '123456789012345678901234567890123456789012345678';
Codec1.EncryptString(str, CipherText, TEncoding.UTF8);
plainText:=CipherText;

Codec1.Free;
CryptographicLibrary1.Free;

Но когда я пытаюсь расшифровать, я получил это сообщение:

предупреждение: iv не используется этим шифром соль = 2000000000000000 ключ = 123456789012345678901234567890123456789012345678 неправильный дешифрование 14672: ошибка: 0606506D: процедуры обработки цифрового конверта: EVP_DecryptFinal_ex: final: неправильный: окончательный: неправильный. \ evp_en c. c: 552:

Я искал ответ от автора (Шон Б. Дюркин) в stackoverflow, но ничего не нашел, я пытался установить IV на 0 (как определено в команде openSSL) но у меня все еще есть плохое зашифрованное сообщение.

Обновление 1:

В вики openSSL я обнаружил, что параметр -K был шестнадцатеричным массивом (источник: https://wiki.openssl.org/index.php/Enc). * 1 025 *

Я пытался с компонентом Delphi OpenSSL (https://github.com/lminuti/Delphi-OpenSSL), и он работал с использованием этого кода:

EncUtil := TEncUtil.Create;

EncUtil.UseBase64 := chkBase64.Checked;

keyBytes := [$12, $34, $56, $78, $90, $12, $34, $56, $78, $90, $12, $34, $56, $78, $90, $12, $34, $56, $78, $90, $12, $34, $56, $78];

iv := [0, 0, 0, 0, 0, 0, 0, 0];

EncUtil.Passphrase.Create(keyBytes, iv);

EncUtil.Cipher := 'DES-EDE3'; // cmbCipher.Text;
EncUtil.Encrypt(edtInputFileName.Text, edtOutputFileName.Text);

EncUtil.Free;

Обновление 2:

Я использовал неправильный режим цепочки, глядя на openSSL do c (https://www.openssl.org/docs/man1.0.2/man1/enc.html), des-ede3 для "Три ключа тройной DES EDE в режиме ECB", и я использовал CB C ...

Но у меня все еще есть проблема" неправильной конечной длины блока ".

Я действительно хочу использовать Lockbox, но даже если я заменю Свойство пароля в байтовом массиве не работает.

...