https://blog.csdn.net/lensko/article/details/100030675
使用公钥加密数据
function public_key_encrypt($str)
{
    $rsa_pub = file_get_contents(ROOT_PATH . 'data/rsa/public_key.pem');
    $encrypted = '';
    $pub_id = openssl_get_publickey($rsa_pub);
    $key_len = openssl_pkey_get_details($pub_id)['bits'];
    $part_len = $key_len / 8 - 11;
    $parts = str_split($str, $part_len);
    foreach ($parts as $part) {
        $encrypted_temp = '';
        openssl_public_encrypt($part, $encrypted_temp, $rsa_pub);
        $encrypted .= $encrypted_temp;
    }
    return base64_encode($encrypted);
}
使用私钥加密数据
function private_key_encrypt($str)
{
    $rsa_pri = file_get_contents(ROOT_PATH . 'data/rsa/private_key.pem');
    $encrypted = '';
    $pri_id = openssl_get_privatekey($rsa_pri);
    $key_len = openssl_pkey_get_details($pri_id)['bits'];
    $part_len = $key_len / 8 - 11;
    $parts = str_split($str, $part_len);
    foreach ($parts as $part) {
        $encrypted_temp = '';
        openssl_private_encrypt($part, $encrypted_temp, $rsa_pri);
        $encrypted .= $encrypted_temp;
    }
    return base64_encode($encrypted);
}
公钥解密
function public_key_decrypt($str)
{
    $rsa_pub = file_get_contents(ROOT_PATH . 'data/rsa/public_key.pem');
    $str = str_replace(' ', '+', $str);
//    openssl_private_decrypt(base64_decode($str), $data, $rsa_pr);
    $decrypted = "";
    $pub_id   = openssl_get_publickey($rsa_pub);
    $key_len  = openssl_pkey_get_details($pub_id)['bits'];
    $part_len = $key_len / 8;
    $base64_decoded = base64_decode($str);
    $parts          = str_split($base64_decoded, $part_len);
    foreach ($parts as $part) {
        $decrypted_temp = '';
        openssl_public_decrypt($part, $decrypted_temp, $rsa_pub);
        $decrypted .= $decrypted_temp;
    }
    return $decrypted;
}
私钥解密
function private_key_decrypt($str)
{
    $rsa_pri = file_get_contents(ROOT_PATH . 'data/rsa/private_key.pem');
    $str = str_replace(' ', '+', $str);
//    openssl_private_decrypt(base64_decode($str), $data, $rsa_pr);
    $decrypted = "";
    $pri_id = openssl_get_privatekey($rsa_pri);
    $key_len = openssl_pkey_get_details($pri_id)['bits'];
    $part_len = $key_len / 8;
    $base64_decoded = base64_decode($str);
    $parts = str_split($base64_decoded, $part_len);
    foreach ($parts as $part) {
        $decrypted_temp = '';
        openssl_private_decrypt($part, $decrypted_temp, $rsa_pri);
        $decrypted .= $decrypted_temp;
    }
    return $decrypted;
}
