Подскажите почему неправильно генерируется ключ утилитой openssl
Написал утилитку на С, для генерации ключа, посредством пароля и соли, пробую, получаю одни данные, пробую тот же самый как мне кажется алгоритм, для генерации родной утилиткой openssl и получаю совсем другие данные, как только не пробовал, я не могу получить тот же ключ, который нужен, и не могу понять, что я делаю не так.
Вот код на Си:
int i, nrounds = 5;
unsigned char key[32], iv[32];
unsigned char salt[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
unsigned char encryptKey[] = "ThisIsKey";
i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1(), salt, encryptKey, strlen((const char *)encryptKey), nrounds, key, iv);
if (i != 32) {
printf("Key size is %d bits - should be 256 bits\n", i);
return -1;
}
printf("[+] Salt => ");
for (int i = 0;i < 8;i++) {
printf("%02X", salt[i]);
}
printf("\n[+] KEY => ");
for (int i = 0;i <= 32;i++) {
printf("%02X", key[i]);
}
printf("\n[+] IV => ");
for (int i = 0;i <= EVP_MAX_IV_LENGTH;i++) {
printf("%02X", iv[i]);
}
printf("\n");
Получаю:
[+] Salt => 1122334455667788
[+] KEY => F3A2F8BE2C1E943FC8FF403D42D9D9F4D38300032D24CBDE964DBC5FAED4966524
[+] IV => 2492C4DFC355EEC2F960B439C658B64188
А вот так пытаюсь в консоли:
openssl aes-256-cbc -pass pass:ThisIsKey -S 1122334455667788 -P -md sha1 -iter 5
salt=1122334455667788
key=56216ECD63F164A4C23C425EB415534AB17F29BAC799C1346B4B88E31951C5DA
iv =80AFEF375648F9EEBB2AE82B802F15CE
Ответы (1 шт):
Автор решения: eri
→ Ссылка
При использовании openssl опцией --iter вместо EVP_BytesToKey используется PKCS5_PBKDF2_HMAC
const EVP_CIPHER *cipher = EVP_get_cipherbyname("aes-256-cbc");
const EVP_MD *dgst = EVP_get_digestbyname("sha1");
unsigned char tmpkeyiv[EVP_MAX_KEY_LENGTH + EVP_MAX_IV_LENGTH];
int iklen = EVP_CIPHER_get_key_length(cipher);
int ivlen = EVP_CIPHER_get_iv_length(cipher);
PKCS5_PBKDF2_HMAC(encryptKey, strlen(encryptKey), salt, sizeof(salt), nrounds, dgst, iklen+ivlen, tmpkeyiv)
memcpy(key, tmpkeyiv, iklen);
memcpy(iv, tmpkeyiv+iklen, ivlen);