代码
/**
* 获取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_key = str_random(16);
$requestId = pu_encrypt($aes_key);
$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"];
$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);
}
}