#c #encryption #openssl
#c #шифрование #openssl
Вопрос:
Я пытаюсь заставить программу на C и CLI openssl генерировать согласованный вывод для шифрования AES.
Для шифрования я использую этот пример C и OpenSSL EVP: https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption#Encrypting_the_message
И он вызывается следующим образом:
....
#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
....
int main()
{
char ciphertext[1024];
static char *enckey = (char *) "7c07f68ea8494b2f8b9fea297119350d78708afa69c1c7600000000000000000";
static char *iv = (char *)"FEDCBA09876543210000000000000000";
size_t* output_length;
ssize_t crypto_length = encrypt("test", 4, enckey, iv, ciphertext);
printf("%s", base64_encode(ciphertext, crypto_length, output_length) );
}
Для OpenSSL CLI я использую:
openssl enc -aes-256-cbc -e -a -A -in input.dat
-K 7c07f68ea8494b2f8b9fea297119350d78708afa69c1c7600000000000000000 -iv FEDCBA09876543210000000000000000
Идентичный ключ, IV, открытый текст (ввод.dat имеет только «test» внутри (без кавычек)), идентичный режим — AES-256-CBC.
И все же я получаю два разных вывода:
- EVP C:
HBy5KT15kp dLFuBNU15rw==
- CLI:
zcTjiVTkZI8XSpDbc0HvRA==
(Я получаю то же самое с программой Java с теми же параметрами)
Есть идеи, почему они будут генерировать разные выходные данные, и поэтому выходные данные EVP не могут быть расшифрованы в CLI.
Комментарии:
1. Я не вижу никакого кода EVP, он должен быть в
encrypt()
методе.2. Однако вам придется явно декодировать этот ключ и IV в шестнадцатеричном виде в вашем коде на C. CLI сделает это за вас.
3. Спасибо, это исправляет проблему.
4. статический символ *Ив = к (char *)»xFEв xdcнаушникиx09x87, такх65х43Х21х00х00х00х00х00х00х00х00″;