【发布时间】:2018-12-11 14:14:06
【问题描述】:
我的问题是较新版本的 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=
CryptoJS:
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=
CryptoJS:
CryptoJS.AES.decrypt('U2FsdGVkX1/5LLkFkTpawh1im4a/fCco5hS42cjn/fg=', 'Secret Passphrase').toString(CryptoJS.enc.Utf8);
输出:空
如何告诉 CryptoJS 使用 SHA256 而不是 MD5 进行密钥派生?
【问题讨论】:
标签: linux encryption openssl sha256 cryptojs