Я использую оболочку 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.Что мне здесь не хватает?
Найдите минимальный, проверяемый, полный пример здесь моего кода, который демонстрирует результат.