PHP7 AES-128-CBC ZeroPadding加密

jwbvrff0
  • 3
新手上路,请多包涵
$body=array(
    "groupID"=>1348
);
$json_str = json_encode($body);
$key = '1234567812345678';
$iv = '1234567812345678'; 
$encrypted = openssl_encrypt($json_str,'AES-128-CBC',$key,OPENSSL_ZERO_PADDING,$iv);

这样的写法有什么问题么?
结果是:
HP7a0w0Pt9vF5PoaKFijhg==
似乎结果和网站的不一致。。。

下面是参考网站
http://tool.chacuo.net/cryptaes
网站的结果是
HP7a0w0Pt9vF5PoaKFijhgB6pvRsuY8IDFDE75tsiBQ=

回复
阅读 1.4k
1 个回答
jwbvrff0
  • 3
新手上路,请多包涵
✓ 已被采纳
function addPKCS7Padding($source, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC)
{
    $source = trim($source);
    $block = mcrypt_get_block_size($cipher, $mode);
    $pad = $block - (strlen($source) % $block);
    if ($pad <= $block) {
        $char = chr($pad);
        $source .= str_repeat($char, $pad);
    }
    return $source;
}

AES 是按数据块大小(128/192/256)对待加密内容进行分块处理的,会经常出现最后一段数据长度不足的场景,这时就需要填充数据长度到加密算法对应的数据块大小。

OpenSSL 默认模式使用 PKCS7 对数据进行填充

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏