我在php中有使用php AES-256-CBC 进行加密的代码
我想帮助使用unix命令行进行解密
这是我在php行中的代码
$dataToEncrypt = hex2bin("6C38AD4E822835753F0E64928CB62744D73F878E763B227CFE8F445028527ACFE5DD0CD0352B396EDC8402414FC68DD5");
$aesKey = hex2bin("152bd89657e03fdc7375a00e1fb1a38bab097c103b803846");
$iv = hex2bin("B109DAE1B71B638E");
$result2 = openssl_encrypt($dataToEncrypt, 'AES-256-CBC', $aesKey, 3,$iv);
echo bin2hex($result2);
输出由php 加密
b2cf19a92ef12bc4ae2d78d73ab587e2178f23913aa132dbd7972d42387687a2c9eab89250dd7eba5709aaef1e8d417d
对于解密,我想像这个一样使用它
openssl aes-256-cbc -d -K 152bd89657e03fdc7375a00e1fb1a38bab097c103b803846 -iv B109DAE1B71B638E -in encrypted.txt -out decrypted.txt
问题我不能得到相同的结果解密
-
假设加密数据以二进制格式(而不是十六进制字符串(存储在文件
encrypted.txt
中,例如,[1]:file_put_contents('<path to encrypted.txt>', $result2);
或者使用十六进制编辑器,用于解密的OpenSSL语句是,[2]:
openssl aes-256-cbc -d -K 152bd89657e03fdc7375a00e1fb1a38bab097c103b8038460000000000000000 -iv B109DAE1B71B638E0000000000000000 -nopad -in encrypted.txt -out decrypted.txt
数据通过OpenSSL语句以二进制格式存储在
decrypted.txt
中,并且可以读取和显示,例如使用[3]:$decrypted = bin2hex(file_get_contents('<path to decrypted.txt>');
或者使用十六进制编辑器。
-
在
openssl_encrypt
-调用中,值3
用作第四个参数($options
(,它对应于标志组合OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
。这意味着加密的数据以二进制格式返回,并且不使用填充。这是可能的,因为明文的长度为48=3*16字节,因此对应于块大小(16字节(的整数倍。由于缺少填充,必须在OpenSSL语句中使用-nopad
选项注意:与其使用值3
,不如使用OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
。 -
密钥的长度为24字节,因此对于使用32字节密钥的AES-256来说太短了8字节。IV具有8个字节的长度,因此对于AES来说也太短了8个字节,AES使用16个字节的IV(对应于AES块大小(。
openssl_encrypt
和OpenSSL将密钥和具有0
-值的IV填充到所需长度,以便可以在OpenSSL语句中使用PHP代码中的值或填充的值注意:使用太短的密钥和IV通常会降低安全性,应避免使用。