PHP7.2+ 版本,DEC-CBC加解密

代码备份录——PHP7.2 加解密之—— DES-CBC

加解密

public static function encrypt($str,$key){
        $str = urlencode($str);
        $str = base64_encode($str);
        $str = self::pkcsPadding($str, 8);
        // 此处根据自己不同偏移量进行修改
        $v = $key;//pack('H*', "1234567890abcdef"); 
        $key = str_pad($key, 8, '0'); // 3DES加密将8改为24
        $sign = openssl_encrypt($str, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,$v);
        $sign = strtoupper(bin2hex($sign));
        return $sign;
    }

    //des解密(cbc模式)
    public static function decrypt($encrypted,$key){
        $encrypted = hex2bin($encrypted);
        // 此处根据自己不同偏移量进行修改
        $v = $key;//pack('H*', "1234567890abcdef");
        $key = str_pad($key, 8, '0'); // 3DES加密将8改为24
        $sign = @openssl_decrypt($encrypted, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,$v);
        $sign = self::unPkcsPadding($sign);
        $sign = rtrim($sign);
        $sign = base64_decode($sign);
        $sign = urldecode($sign);
        return $sign;
    }

相关代码

    /**
     * 填充
     * @param $str
     * @param $blocksize
     * @return string
     */
    private static function pkcsPadding($str, $blocksize){
        $pad = $blocksize - (strlen($str) % $blocksize);
        return $str . str_repeat(chr($pad), $pad);

    }

    /**
     * 去填充
     * @param $str
     * @return string
     */
    private static function unPkcsPadding($str){
        $pad = ord($str{strlen($str) - 1});
        if ($pad > strlen($str)) {
            return false;
        }
        if (strspn($str, chr($pad), strlen($str) - $pad) != $pad){
            return false;
        }
        return substr($str, 0, -1 * $pad);
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
朝着梦,踏平坎坷
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

这么好的帖子怎么就没有人顶呢,谢谢分享

3年前 评论

unPkcsPadding 和 pkcsPadding,这两个函数没有哦

3年前 评论
wavebossy6666 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!