PHP接口数据传输加密解密——openssl 扩展实现

博客介绍了前端使用crypto-js进行加密,PHP使用openssl_decrypt进行解密的方法,并给出了crypto-js的链接。主要围绕前端加密和PHP解密的技术实现展开,属于信息技术领域。

前端用crypto-js来进行加密,php使用openssl_decrypt来进行解密

crypto-js链接:

https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js

https://cdn.jsdelivr.net/npm/crypto-js@4.0.0/crypto-js.js

前端加密解决:

<script src="cdn.jsdelivr.net_npm_crypto-js@4.0.0_crypto-js.js"></script>
<script>
    // 1.加密
    // @param  data {加密的数据}
    // @param  key {加密的key 16位}
    function encrypt(data,key,iv) {
        return CryptoJS.AES.encrypt(data, key, {
            mode: CryptoJS.mode.CBC,
            iv: iv,
            padding: CryptoJS.pad.Pkcs7
        }).toString();
    }
    // 2.解密
    // @param  data {解密的数据}
    // @param  key {解密的key 16位}
    function decrypt(data,key,iv) {
        return CryptoJS.AES.decrypt(data, key, {
                mode: CryptoJS.mode.CBC,
                iv: iv,
                padding: CryptoJS.pad.Pkcs7
            }).toString(CryptoJS.enc.Utf8);
    }

    // 3.调用函数
    //需要加密的数据
    var arr = {name: "张三", sex: "男", age: 19}
    // 数组转Json
    var arrjson = JSON.stringify(arr);
    // 我采用的是16位的key,为了方便我前端就把key转成UTF8
    let key1 = CryptoJS.enc.Utf8.parse('GftZqNEoBVdB2kwx');
    // iv采用的是16位的,同样为了方便转成UTF8
    let iv1 = CryptoJS.enc.Utf8.parse('3zyJFPEzh5rUeUNi');
    // 加密
    var dataencrypt = encrypt(arrjson,key1,iv1);
    console.log(dataencrypt)

    // 需要解密的数据
    let encryptDatas = 'bqGZPuD0tzIzBGHYfw5YA9xLpafs3g2dom1RsRnYQ2TlSH/6AiQI40yN86pAASqf';
    // 我采用的是16位的key,为了方便我前端就把key转成UTF8
    let key2 = CryptoJS.enc.Utf8.parse('GftZqNEoBVdB2kwx');
    // iv采用的是16位的,同样为了方便转成UTF8
    let iv2 = CryptoJS.enc.Utf8.parse('3zyJFPEzh5rUeUNi');
    // 解密
    datadecrypt = decrypt(encryptDatas,key2,iv2);
    console.log(datadecrypt);
    // console.log(JSON.parse(datadecrypt));

</script>

PHP加密解密:

<?php
//解密
function aesDecrypt($data) {
    // 密钥key要和前端一致,由于前端转成了UTF8的格式,这边就可以直接使用了
    $cryptKey = 'GftZqNEoBVdB2kwx';
    // iv也是一样要和前端一致
    $iv = '3zyJFPEzh5rUeUNi';
    // 然后使用openssl_decrypt来进行解密
    $decrypt = openssl_decrypt($data, 'AES-128-CBC', $cryptKey, 0, $iv);
    echo $decrypt;
}

aesDecrypt('twaQpH9sPCN1Wc+UdGymnrZg+PNybLmNsaJhAX6+VM+Wpsp11n+m5pNr5aMLtL1d');

//加密
function aesEncrypt($data) {
    $cryptKey = 'GftZqNEoBVdB2kwx';
    $iv = '3zyJFPEzh5rUeUNi';
    $encrypt = openssl_encrypt($data, 'AES-128-CBC', $cryptKey, 0, $iv);
    echo $encrypt;
}
aesEncrypt(json_encode(['name'=>'小明','sex'=>'男', 'age' => 19]));

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值