encypt using php AES-256-CBC & decrypt unix commande line



我在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通常会降低安全性,应避免使用。

最新更新