savostin
@savostin
Еще один программист

C++ OpenSSL (1.1.1) EVP_BytesToKey -> CryptoJS.PBKDF2. Почему разные key и iv?

Подскажите пожалуйста, где ошибка. Пытаюсь получить один и тот же key/iv из password/salt.
В c++:
typedef uchar aes_salt_t[8];
typedef uchar aes_key_t[32];
typedef uchar aes_iv_t[32];
int m_count = 1000;
const string pass = "password";
aes_key_t   m_key;
aes_iv_t    m_iv;
aes_salt_t  m_salt = "12345678";
bzero(m_key, sizeof(m_key));
bzero(m_iv, sizeof(m_iv));
OpenSSL_add_all_algorithms();
const EVP_CIPHER* cipher = EVP_get_cipherbyname("aes-256-cbc");
const EVP_MD*     digest = EVP_get_digestbyname("sha256");
int ks = EVP_BytesToKey(cipher,    // cipher type
			  digest,    // message digest
			  m_salt,    // 8 bytes
			  (uchar*)m_pass.c_str(), // pass value
			  m_pass.length(),
			  m_count,   // number of rounds
			  m_key,
			  m_iv);
cout << encode_base64(m_key, 32) << endl;
cout << encode_base64(m_iv, 16) << endl;


В CryptoJS (web):
var password = "password";
var salt = "12345678";
var saltWA = CryptoJS.enc.Utf8.parse(salt);
var keyIvWA = CryptoJS.PBKDF2(
            password,
            saltWA, {
                keySize: (32 + 16) / 4,   // Верно?
                iterations: 1000,
                hasher: CryptoJS.algo.SHA256
            }
        );
var keyWA = CryptoJS.lib.WordArray.create(keyIvWA.words.slice(0, 32 / 4));
var ivWA = CryptoJS.lib.WordArray.create(keyIvWA.words.slice(32 / 4, (32 + 16) / 4));

console.log(keyWA.toString(CryptoJS.enc.Base64))
console.log(ivWA.toString(CryptoJS.enc.Base64))


Почему разный вывод? Почему CryptoJS ничего не спрашивает про cipher, только про digest, а OpenSSL использует оба?
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
savostin
@savostin Автор вопроса
Еще один программист
Вопрос решился откатом на версию CryptoJS 3.3.0 (была последняя, 4.0)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
26 янв. 2021, в 15:11
200000 руб./за проект
26 янв. 2021, в 14:55
2000 руб./за проект
26 янв. 2021, в 14:48
900 руб./в час