Файл, зашифрованный с помощью openssl C API, не может быть расшифрован командной строкой openssl - PullRequest
0 голосов
/ 13 апреля 2019

Я использую шифрование AES 256 cbc. Я могу зашифровать и успешно расшифровать файл с помощью openssl C API. Однако, когда я пытаюсь использовать командную строку для расшифровки файла, зашифрованного C API, дешифрование даст неправильный вывод. Вот командная строка, которую я использую:

openssl enc -d -aes-256-cbc -in ./input.bin -K "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" -iv "00112233445566778899aabbccddeeff" -nopad > output.txt

Я запускаю команду с параметром –nopad и без него. Без этой опции я получаю ошибку «процедуры цифрового конверта: EVP_DecryptFinal_ex: bad decrypt». Когда я использую C API, я использую тот же IV и ключ:

unsigned char key[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
                       0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
unsigned char iv[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };

Совместимы ли шифрование из командной строки и C API? Или я упускаю какой-либо необязательный аргумент в командной строке или настройках в C API, чтобы сделать шифрование / дешифрование совместимым между командной строкой и C API? Спасибо за помощь.

EDIT: Input.bin содержит эти данные (размещенные здесь в шестнадцатеричном формате):

    02 d3 f8 94 e0 8c 82 ae e9 13 27 a7 e6 e3 b0 3d
24 2a ea 37 5a ff fe 1a fe ee 41 0d 81 54 fa 32

1 Ответ

1 голос
/ 13 апреля 2019

Ваш пример фактически зашифрован в режиме ECB. Я только что расшифровал его с помощью онлайн-инструмента:

76 65 72 79 20 73 68 6f 72 74 31 32 33 34 35 36  very short123456
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...