php 实现RSA加密解密

class Rsa
{
    public $privateKey = '';

    public $publicKey = '';

    public $conf = ['config' => 'C:/xampp/php/extras/ssl/openssl.cnf'];
    
    // 初始化,生成公钥和私钥对
    public function __construct(){
        $resource = openssl_pkey_new($this->conf);
        openssl_pkey_export($resource, $this->privateKey, null, $this->conf);
        $detail = openssl_pkey_get_details($resource);
        $this->publicKey = $detail['key'];
    }

    // 公钥加密数据
    public function publicEncrypt($data, $publicKey){
        openssl_public_encrypt($data, $encrypted, $publicKey);
        return $encrypted;
    }

    // 公钥解密数据
    public function publicDecrypt($data, $publicKey){
        openssl_public_decrypt($data, $decrypted, $publicKey);
        return $decrypted;
    }

    // 私钥加密数据
    public function privateEncrypt($data, $privateKey){
        openssl_private_encrypt($data, $encrypted, $privateKey);
        return $encrypted;
    }

    // 私钥解密数据
    public function privateDecrypt($data, $privateKey){
        openssl_private_decrypt($data, $decrypted, $privateKey);
        return $decrypted;
    }
}


$rsa = new Rsa();
echo "公钥:<br>" . $rsa->publicKey . "<br>";
echo "私钥:<br>" . $rsa->privateKey . "<br>";

echo "<hr>";

// 使用公钥加密
$str = $rsa->publicEncrypt('hello', $rsa->publicKey);
// 这里使用base64是为了不出现乱码,默认加密出来的值有乱码
$str = base64_encode($str);
echo "公钥加密(base64处理过):<br>" . $str . "<br>";
$str = base64_decode($str);
$pubstr = $rsa->publicDecrypt($str, $rsa->publicKey);
echo "公钥解密:<br>" . $pubstr . "<br>";
$privstr = $rsa->privateDecrypt($str, $rsa->privateKey);
echo "私钥解密:<br>" . $privstr . "<br>";

echo "<hr>";

// 使用私钥加密
$str = $rsa->privateEncrypt('world', $rsa->privateKey);
// 这里使用base64是为了不出现乱码,默认加密出来的值有乱码
$str = base64_encode($str);
echo "私钥加密(base64处理过):<br>" . $str . "<br>";
$str = base64_decode($str);
$pubstr = $rsa->publicDecrypt($str, $rsa->publicKey);
echo "公钥解密:<br>" . $pubstr . "<br>";
$privstr = $rsa->privateDecrypt($str, $rsa->privateKey);
echo "私钥解密:<br>" . $privstr . "<br>";

猜你喜欢

转载自my.oschina.net/xiaoerit/blog/1809697