PHP 简单常用加密方式以及API交互加密解密

DES算法:已经被攻破不安全

        $key     = uniqid();
        $md5_key = md5($key);
        $vi      = substr($md5_key, 0, 8);
        $data    = "hello world";
        $method  = "DES-CBC";

        // 加密数据
        $content = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $vi);
        dump($content);


        // 解密数据
        $content = openssl_decrypt($content, $method, $key, OPENSSL_RAW_DATA, $vi);
        dump($content);

 

AES算法:安全的对称加密算法

同DES差距在偏移量需要为16位

        $key     = uniqid();
        $md5_key = md5($key);
        $vi      = substr($md5_key, 0, 16);
        $data    = "hello world";
        $method  = "AES-128-CBC";

        // 加密数据
        $content = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $vi);
        dump($content);


        // 解密数据
        $content = openssl_decrypt($content, $method, $key, OPENSSL_RAW_DATA, $vi);
        dump($content);

 

 

RSA算法:非对称加密(公钥加密私钥解密或私钥加密公钥解密)

        $public  = '公钥';
        $private = '私钥';

        // 公钥加密
        $content = "hello world";
        openssl_private_encrypt($content, $encrypt, $private);
        dump($encrypt);

        // 私钥解密
        openssl_public_decrypt($encrypt, $decrypt, $public);
        dump($decrypt);

 

Hash加密:md5()

api正常使用加密流程:

api客户端加密示例:

            //API加密示例
            // 秘钥对生成网址:http://web.chacuo.net/netrsakeypair
            $public = '公钥';

            // 1、参数编码
            $appkey             = "123";
            $secretkey          = "abc";
            $url                = "http://127.0.0.1/api.php/test/indexs?";
            $params["appkey"]   = $appkey;
            $params["name"]     = "Tom";
            $params["time"]     = time();
            $queryString        = http_build_query($params);

            // 2、参数生成签名
            ksort($params); // 按键排序
            $q           = http_build_query($params);
            $q           .= $secretkey;
            $sign        = md5($q);
            $queryString .= "&sign=" . $sign;

            // 3、公钥加密
            openssl_public_encrypt($queryString, $encrypt, $public);
            $encrypt = urlencode($encrypt);
            $url .= "q=" . $encrypt;

            //加密后请求地址
            dump($url);

api服务端接收解密示例:

            //API接收方解密示例
            // 秘钥对生成网址:http://web.chacuo.net/netrsakeypair
            $private = '私钥';

            // 1、获取参数之后使用私钥解密
            $q = $_GET["q"];
            $decrypt = "";
            openssl_private_decrypt($q, $decrypt, $private);

            // 2、将字符串格式的参数转为数组
            $params = [];
            parse_str($decrypt, $params);

            // 3、时间检验,控制url存活时间
            if(abs($params["time"] - time()) >= 60){
                echo "页面超时";die;
            }

            // 4、比对签名是否正确
            $config = ["123" => "abc"];
            //签名建议封装
            $signs = $params["sign"];
            unset($params["sign"]);
            ksort($params);
            $q    = http_build_query($params);
            $sign = md5($q . $config[$params["appkey"]]);
            if ($sign != $signs){
                echo "error";die;
            }

            echo "success";

 

https通讯原理:先通过rsa非对称加密传输秘钥后通过签名进行对称加密传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值