Как я могу создать вывод OpenSSL, который сравнивается с выводом OpenSSL C ++ для генерации модульных тестов? - PullRequest
0 голосов
/ 26 апреля 2018

Я использую оболочку C ++ для шифрования OpenSSL AES-256-CBC, которая следует рецепту из Документы OpenSSL .Он предназначен для шифрования некоторых данных, ключа и вектора инициализации и возврата зашифрованных байтов.

Теперь в относительном смысле шифрование и дешифрование работает отлично.Я могу зашифровать что угодно, расшифровать и получить исходные данные.Тем не менее, я хотел бы проверить это в абсолютном смысле .Итак, я использую OpenSSL в командной строке / терминале для создания зашифрованных данных, а затем внедряю их в свои тесты.Но выходные данные не совпадают, и я не уверен, с чего начать или как систематически справляться с этим.

Чтобы получить шестнадцатеричные данные:

printf '%s' 'Hello world!' | xxd -ps

, который возвращает 48656c6c6f20776f726c6421.

Затем, чтобы зашифровать его с помощью OpenSSL:

printf '%s' '48656c6c6f20776f726c6421' | xxd -r -ps | openssl aes-256-cbc -iv 00000000000000000000000000000000 -k 0000000000000000000000000000000000000000000000000000000000000000 -nosalt | xxd -ps

, что дает f1b486ded0fd22dad9dbdab2205f61c2.

xxd -r преобразует шестнадцатеричные числа в байты, а xxd делает противоположное,Я пытался также с обычным Hello world! без xxd в начале, но тоже не так.Результат всегда не соответствует тому, что я получаю в коде C ++ OpenSSL.Что мне здесь не хватает?

Найдите минимальный, проверяемый, полный пример здесь моего кода, который демонстрирует результат.

1 Ответ

0 голосов
/ 26 апреля 2018

Я понял это.Проблема заключалась в том, что я использовал неправильный параметр командной строки.Для ключа должно быть -K, а не -k.Это правильный формат:

printf '%s' '48656c6c6f20776f726c6421' | xxd -r -ps | openssl aes-256-cbc -iv 00000000000000000000000000000000 -K 0000000000000000000000000000000000000000000000000000000000000000 -nosalt | xxd -ps

, и это дает тот же результат, что и OpenSSL в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...