PHP RSA公钥加密解密,私钥加密解密

// 数据加密,使用公钥加密数据

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值