利用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, '&');
}