我有以下shell脚本,它使用openssl加密字符串:
RegExp.Global=True
我试图在javascript中使用相同的功能(在postman中使用它)。目前我有以下代码:
API_KEY="qrBprgc/3dTjrrD@4t!9FcNjwT3_Ra"
DATE="Mon, 19 Mar 2018 12:45:05 EET"
aesivkey=$(echo -n "$DATE" | openssl dgst -sha256 -hmac "$API_KEY" -r)
aes128cbciv=${aesivkey:0:32}
aes128cbckey=${aesivkey:32:32}
private_key="test"
encrypted_private_key=`echo -e $private_key | openssl aes-128-cbc -base64 -nosalt -K $aes128cbckey -iv $aes128cbciv`
有人可以解释一下我做错了吗?
shell脚本中的结果:HSMD8RaXNbRrN4c1NzFXvQ ==
javascript中的结果:U2FsdGVkX1 + uapLKV00iSOtj8eVpjfY4onoqQmoPPF4 =
答案 0 :(得分:1)
目前结果是Salted__
(参见base 64编码的ASCII内容,前8个字节拼写这个单词),即它使用密码加密。这可能是因为您的密钥和IV需要在使用前从十六进制解码为WordArray
。如果密钥是字符串而不是WordArray
,则它将被解释为密码,并且密钥将被派生。
例如:
CryptoJS.enc.Hex.parse(aes128cbckey)
和
iv: CryptoJS.enc.Hex.parse(aes128cbciv)
注意:
如果您提供密码,在配置参数中指定keySize
会很好,但如果您直接指定密钥,则可能不应该使用密码。
创建CryptoJS的开发人员真的非常没有超载encrypt
函数。