Моя проблема в том, что более новые версии OpenSSL несовместимы с настройками CryptoJS по умолчанию.
Хэш по умолчанию, используемый openssl enc для получения ключа на основе пароля, изменен в 1.1.0 на SHA256 по сравнению с MD5 в более ранних версиях. https://unix.stackexchange.com/questions/344150/why-can-one-box-decrypt-a-file-with-openssl-but-another-one-cant/344586#344586
По умолчанию CryptoJS использует MD5 для получения ключа. OpenSSL использовал MD5, но теперь в версиях OpenSSL >=1.1.0 используется SHA256.
Итак, если я передам -md md5
OpenSSL, CryptoJS будет совместим:
echo "Hello World" | openssl enc -aes-256-cbc -md md5 -pass pass:"Secret Passphrase" -e -base64
вывод: U2FsdGVkX19aufvaqQQ89scaApBos6oFCyqPj7IKUFk=
КриптоJS:
CryptoJS.AES.decrypt('U2FsdGVkX19aufvaqQQ89scaApBos6oFCyqPj7IKUFk=', 'Secret Passphrase').toString(CryptoJS.enc.Utf8);
вывод: "Hello World"
Но теперь, если я хочу использовать SHA256 вместо MD5 (удалив -md md5
):
echo "Hello World" | openssl enc -aes-256-cbc -pass pass:"Secret Passphrase" -e -base64
вывод: U2FsdGVkX1/5LLkFkTpawh1im4a/fCco5hS42cjn/fg=
КриптоJS:
CryptoJS.AES.decrypt('U2FsdGVkX1/5LLkFkTpawh1im4a/fCco5hS42cjn/fg=', 'Secret Passphrase').toString(CryptoJS.enc.Utf8);
вывод: ноль
Как указать CryptoJS использовать SHA256 вместо MD5 для получения ключа?