使用php AES-256-CBC和;解密unix命令行

使用php AES-256-CBC和;解密unix命令行,php,aes,Php,Aes,我用php编写了使用PHPAES-256-CBC的encypt代码 我想帮助您使用unix命令行获取decypt 这是我的php代码行 $dataToEncrypt = hex2bin("6C38AD4E822835753F0E64928CB62744D73F878E763B227CFE8F445028527ACFE5DD0CD0352B396EDC8402414FC68DD5"); $aesKey = hex2bin("152bd89657e03fdc7375a00e1fb1a38bab097

我用php编写了使用PHPAES-256-CBC的encypt代码

我想帮助您使用unix命令行获取decypt

这是我的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
对于derypt,我想这样使用它

openssl aes-256-cbc -d -K 152bd89657e03fdc7375a00e1fb1a38bab097c103b803846 -iv B109DAE1B71B638E -in encrypted.txt -out decrypted.txt
问题:decypt无法获得相同的结果
  • 假设加密数据以二进制格式(而不是十六进制字符串)存储在文件
    encrypted.txt
    中,例如,可以使用:

    数据通过OpenSSL语句以二进制格式存储在
    decrypted.txt
    中,并可通过以下方式读取和显示:

    $decrypted=bin2hex(文件获取内容(“”);
    
    或者使用十六进制编辑器

  • openssl\u encrypt
    -调用中,值
    3
    用作第四个参数(
    $options
    ),它对应于标志组合
    OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
    。这意味着加密数据以二进制格式返回,并且不使用填充。这是可能的,因为明文的长度为48=3*16字节,因此对应于块大小(16字节)的整数倍。由于缺少填充,OpenSSL语句中必须使用
    -nopad
    选项。注意:与其使用值
    3
    ,不如使用
    OpenSSL_RAW_DATA | OpenSSL_ZERO_padding

  • 密钥的长度为24字节,因此比使用32字节密钥的-256短8字节。IV的长度为8字节,因此比使用16字节IV的AES短8字节(对应于AES块大小).
    openssl\u encrypt
    和openssl使用
    0
    -值将密钥和IV填充到所需的长度,以便可以在openssl语句中使用PHP代码中的值或填充值。注意:使用太短的密钥和IV通常会降低安全性,应避免使用

      • 假设加密数据以二进制格式(而不是十六进制字符串)存储在文件
        encrypted.txt
        中,例如,可以使用:

        数据通过OpenSSL语句以二进制格式存储在
        decrypted.txt
        中,并可通过以下方式读取和显示:

        $decrypted=bin2hex(文件获取内容(“”);
        
        或者使用十六进制编辑器

      • openssl\u encrypt
        -调用中,值
        3
        用作第四个参数(
        $options
        ),它对应于标志组合
        OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
        。这意味着加密数据以二进制格式返回,并且不使用填充。这是可能的,因为明文的长度为48=3*16字节,因此对应于块大小(16字节)的整数倍。由于缺少填充,OpenSSL语句中必须使用
        -nopad
        选项。注意:与其使用值
        3
        ,不如使用
        OpenSSL_RAW_DATA | OpenSSL_ZERO_padding

      • 密钥的长度为24字节,因此比使用32字节密钥的-256短8字节。IV的长度为8字节,因此比使用16字节IV的AES短8字节(对应于AES块大小).
        openssl\u encrypt
        和openssl使用
        0
        -值将密钥和IV填充到所需的长度,以便可以在openssl语句中使用PHP代码中的值或填充值。注意:使用太短的密钥和IV通常会降低安全性,应避免使用

      file_put_contents('<path to encrypted.txt>', $result2);
      
      openssl aes-256-cbc -d -K 152bd89657e03fdc7375a00e1fb1a38bab097c103b8038460000000000000000 -iv B109DAE1B71B638E0000000000000000 -nopad -in encrypted.txt -out decrypted.txt
      
      $decrypted = bin2hex(file_get_contents('<path to decrypted.txt>');