字符串加密解密
接口加密/解密
/**
* 功 能: 字符串加解密
* 修改日期: 2018-08-27
* @param string/array $data 用户数据
* @param string $key 密钥
* @param int $decrypt 0 加密 1解密
* @param int $return_array 0 返回字符串 1 返回数据
* @return mixed|string
*/
function encryptDecrypt($data, $key, $decrypt = 0, $return_array = 1)
{
$data = is_array($data) ? json_encode($data) : $data;
$encryption_key = base64_decode($key);
if ($decrypt)
{
list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
$return = openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);
} else {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
$return = base64_encode($encrypted . '::' . $iv);
}
return $return_array ? json_decode($return, 1) : $return;
}
生成验证字段
其他检验字段:appid、expire
function makeSign($params, $key)
{
if (isset($params['sign']))
{
unset($params['sign']);
}
//签名步骤一:按字典序排序参数
ksort($params);
$string = http_build_query($params);
//签名步骤二:在string后加入KEY
$string = $string . "&key=" . $key;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
其他说明
对于不同用户的请求,最好根据用户生成不同的密钥
更多
http://php.net/manual/zh/openssl.installation.php
Last updated