PHP AES cbc模式 pkcs7 128加密解密

Posted cn三少nginx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP AES cbc模式 pkcs7 128加密解密相关的知识,希望对你有一定的参考价值。

今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密。这里简单写一个demo

class Model_Junjingbao extends Model
{
   
    private static $_partnerKey  = ‘6d70a09e4d0f8095‘;
    //获取库存,更新价格信息
    public static function test($productId=2780)
    {
       
        $data = array(
            ‘productId‘=>$productId,
            ‘startTime‘=>‘2018-04-09‘,
            ‘endTime‘=>‘2018-04-10‘
        );
   
         $str = json_encode($data);
        $xcrypt =  self::aes_cbc_pkpadding($str);
        
        var_dump($xcrypt);//加密结果
        var_dump(self::aes_cbc_pkpadding_back($xcrypt));//解密结果
    }


    //AES加密数据
    private static function aes_cbc_pkpadding($str)
    {
       
        $block= mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
        $pad=$block-(strlen($str)%$block);
        if($pad<=$block) {
            $char=chr($pad);
            $str.=str_repeat($char,$pad);
        }
        $xcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::$_partnerKey, $str, MCRYPT_MODE_CBC);
      
       
        return $xcrypt;
    }

    //AES解密数据
    private static function aes_cbc_pkpadding_back($xcrypt)
    {

        $string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, self::$_partnerKey, $xcrypt, MCRYPT_MODE_CBC);
        $slast = ord(substr($string, -1));
        $slastc = chr($slast);
        if (preg_match("/$slastc{" . $slast . "}/", $string)) {
            $string = substr($string, 0, strlen($string) - $slast);
            return $string;
        } else {
            return false;
        }
    }

}
执行test方法

加密结果


øæ׌“j·A" OÈ[ótcÚ‡2Y‰XXÒ¦½™Ép¬p[DâFw`?oàá¹d&x4(çôl£‰¡±Ü‘I¾‘ä YÖsÓd°Ý·^$’4höè¶Â÷GÂ)

解密结果


{"productId":2780,"startTime":"2018-04-09","endTime":"2018-04-10"}

以上是关于PHP AES cbc模式 pkcs7 128加密解密的主要内容,如果未能解决你的问题,请参考以下文章

使用 AES/CBC/PKCS7Padding 的 JAVA 加密

在 Android 中的 iOS AES/CBC/PKCS7Padding 128 位算法中加密的解密字符串的问题

php-AES/CBC/PKCS7Padding加密的实现

JAVA AES CBC 加密 解密

javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子

AES/CBC/PKCS7Padding加密方式