PHP RSA与AES之加密解密(三)

代码

/**
 * 获取honor私钥资源id
 */
if(!function_exists('pi_key')){

    function pi_key($from = "honor")
    {
        return openssl_pkey_get_private(file_get_contents('../cert/'.$from.'/cert_private.pem'));
    }

}


/**
 * 获取partner公钥资源id
 */
if(!function_exists('pu_key')){

    function pu_key($to = "partner")
    {
        return openssl_pkey_get_public(file_get_contents('../cert/'.$to.'/cert_public.key'));
    }
}


/**
 * rsa私钥加密
 */
if(!function_exists('pi_encrypt')){

    /**
     * @param $data
     * @param string $use
     * @return string
     */
    function pi_encrypt($data,$use = 'honor')
    {
        openssl_private_encrypt($data,$encrypt,pi_key($use));
        return base64_encode($encrypt);
    }
}


/**
 * rsa私钥解密
 */
if(!function_exists('pi_decrypt')){

    /**
     * @param $data
     * @param string $use
     * @return mixed
     */
    function pi_decrypt($data,$use = 'partner')
    {
        openssl_private_decrypt(base64_decode($data),$decrypt,pi_key($use));
        return $decrypt;
    }

}


/**
 * rsa公钥解密
 */
if(!function_exists('pu_decrypt')){

    /**
     * @param $data
     * @param string $use
     * @return mixed
     */
    function pu_decrypt($data,$use = "honor")
    {
        openssl_public_decrypt(base64_decode($data),$decrypt,pu_key($use));
        return $decrypt;
    }
}

/**
 * rsa 公钥加密
 */
if(!function_exists('pu_encrypt')){

    /**
     * @param $data  $data  要加密的数据
     * @param string $use    用哪个公钥
     * @return string
     */
    function pu_encrypt($data,$use = "partner")
    {
        openssl_public_encrypt($data,$encrypt,pu_key($use));
        return base64_encode($encrypt);
    }
}


/**
 * aes 加密
 */
if(!function_exists('aes_encrypt')){

    /**
     * @param $key  私钥
     * @param $input 要加密的数据
     * @return string
     */
    function aes_encrypt($key,$input)
    {
        $data = is_array($input)? json_encode($input,JSON_UNESCAPED_UNICODE):$input;
        return openssl_encrypt($data,'aes-128-ecb',$key);
    }
}

/**
 * aes 解密
 */
if(!function_exists('aes_decrypt')){

    /**
     * @param $key  私钥
     * @param $data 要解密的数据
     * @return bool|string
     */
    function aes_decrypt($key,$data)
    {
        return json_decode(openssl_decrypt($data,'aes-128-ecb',$key),true)?:json_decode($data,true);
    }
}


/**
 * 连接半半
 */
if(!function_exists('connect_partner')){

    /**
     * @param $raw_data    post  过去的数据
     * @param string   $action   接口名
     * @return mixed
     */
    function connect_partner($raw_data,$action = "addition")
    {

        //aes 随机私钥(16位重要)
        $aes_key  = str_random(16);

        //rsa 公钥加密
        $requestId = pu_encrypt($aes_key);

        //aes 加密后数据
        $aes_data = aes_encrypt($aes_key,$raw_data);

        //请求地址
        $url = "192.168.0.131:8088/sdk/".$action;

        //请求头
        $header = ["appId:test","requestId:$requestId","Content-Type:application/json"];

        //curl
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT,1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$aes_data);

        $out_put = curl_exec($ch) or die('远程主机连接失败!');

        return aes_decrypt($aes_key,$out_put);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_39647045/article/details/81539386