Php基于充电桩互联互通平台对接(中电联接口标准实现)

1.中电联的一些接口及加密标准

T/CEC 102.4-2016 电动汽车充换电服务信息交换 第4部分: 数据传输及安全

2.根据文档可以看出,加密/解密的方式以及一些规范


签名.png

加密.png

规范.png

正文:

!!!!!实际开发需要注意秘钥的使用!!!!!

1.其加密sig(签名)主要通过HMAC-MD5的方式实现,填充方式是PKCS5Padding
具体Php代码:

    //转换字符编码为utf-8
    public function strToUtf8($str){
        $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
        if($encode == 'UTF-8'){
            return $str;
        }
        else{
            return mb_convert_encoding($str, 'UTF-8', $encode);
        }
    }

    /**
     * sig加密算法
     * @param $data 加密数据
     * @param $key  加密key
     * @return string
     */
    public function hmac($data, $key): string
    {
        $key = $this->strToUtf8($key);
        $data = $this->strToUtf8($data);
        $b = 64;
        if (strlen($key) > $b) {
            $key = pack("H32", md5($key));
        }
        $key = str_pad($key, $b, chr(0x00));
        $ipad = str_pad('', $b, chr(0x36));
        $opad = str_pad('', $b, chr(0x5c));
        $k_ipad = $key ^ $ipad;
        $k_opad = $key ^ $opad;
        return strtoupper(md5($k_opad . pack("H32", md5($k_ipad . $data))));
    }

2.数据返回加密/解密主要是通过AES-128-CBC实现
具体代码:

    /**
     * 加密
     * @param $data
     * @param $key
     * @param $iv
     * @return string
     */
    public function encrypt($data,$key,$iv): string
    {
        $data = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_PKCS1_PADDING,  $iv);
        return base64_encode($data);
    }

    /**
     * 解密
     * @param $data
     * @param $key
     * @param $iv
     * @return false|string
     */
    public function decrypt($data,$key,$iv)
    {
        return openssl_decrypt(base64_decode($data), 'AES-128-CBC', $key, OPENSSL_PKCS1_PADDING, $iv);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容