利用RSA密钥对对字符进行加解密
$public_key = '
-----BEGIN PUBLIC KEY-----
......
-----END PUBLIC KEY-----
';
$private_key = '
-----BEGIN PRIVATE KEY-----
......
-----END PRIVATE KEY-----';
$param = [
'platId' => '1001',
'mchOrderNo' => 'rsa123456789',
'amount' => '100',
'clientIp' => '192.168.0.15',
'returnUrl' => 'https://blog.alonesky.com',
'notifyUrl' => 'https://blog.alonesky',
'reqTime' => '20190723141000',
'version' => '1.0'
];
$encrypted = "";
$param = makeSign($param);
// print_r($param);exit;
openssl_public_encrypt($param, $encrypted, $public_key);
$encrypted = base64_encode($encrypted);
// print_r(strtoupper($encrypted));exit;
$decrypted = "";
// print_r($encrypted);exit;
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $private_key);
print_r($decrypted);
exit;
/**
* 生成签名
* @param $values
* @return string 本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
*/
function makeSign($values)
{
//签名步骤一:按字典序排序参数
ksort($values);
$string = toUrlParams($values);
//签名步骤二:在string后加入KEY
// $string = $string . '&key=EWEFD123RGSRETYDFNGFGFGSHDFGH';
//签名步骤三:MD5加密
// $string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
/**
* 格式化参数格式化成url参数
* @param $values
* @return string
*/
function toUrlParams($values)
{
$buff = '';
foreach ($values as $k => $v) {
if ($k != 'sign' && $v != '' && !is_array($v)) {
$buff .= $k . '=' . $v . '&';
}
}
return trim($buff, '&');
}