PHP非对称加密算法(RSA)加密机制设计

创建私钥、公钥

//生成原始 RSA私钥文件
 
openssl genrsa -out rsa_private_key.pem 1024
 
//将原始 RSA私钥转换为 pkcs8格式
 
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
 
//生成RSA公钥
 
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
 
//我们将私钥rsa_private_key.pem用在服务器端,公钥发放给android跟ios等前端。

服务端类库

<?php
/**
 * Created by PhpStorm.
 * Desc: Rsa类
 * Coder: Wanzhou Chen
 * Date: 2022-06-24
 * Time: 14:46
 */
class Rsa
{
 
    private static $PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----
                公钥
-----END PRIVATE KEY-----';
 
    private static $PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----
                私钥
-----END PUBLIC KEY-----';
 
 
    /**
     * 获取私钥
     * @return bool|resource
     */
    private static function getPrivateKey()
 
    {
 
        $privKey = self::$PRIVATE_KEY;
 
        return openssl_pkey_get_private($privKey);
 
    }
 
 
    /**
     * 获取公钥
     * @return bool|resource
     */
    private static function getPublicKey()
 
    {
 
        $publicKey = self::$PUBLIC_KEY;
 
        return openssl_pkey_get_public($publicKey);
 
    }
 
 
    /**
     * 私钥加密
     * @param string $data
     * @return null|string
     */
    public static function privateEncrypt($data = '')
 
    {
 
        if (!is_string($data)) {
 
            return null;
 
        }
 
        return openssl_private_encrypt($data, $encrypted, self::getPrivateKey()) ? base64_encode($encrypted) : null;
 
    }
 
 
    /**
     * 公钥加密
     * @param string $data
     * @return null|string
     */
    public static function publicEncrypt($data = '')
 
    {
 
        if (!is_string($data)) {
 
            return null;
 
        }
 
        return openssl_public_encrypt($data, $encrypted, self::getPublicKey()) ? base64_encode($encrypted) : null;
 
    }
 
 
    /**
     * 私钥解密
     * @param string $encrypted
     * @return null
     */
    public static function privateDecrypt($encrypted = '')
 
    {
 
        if (!is_string($encrypted)) {
 
            return null;
 
        }
 
        return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, self::getPrivateKey())) ? $decrypted : null;
 
    }
 
 
    /**
     * 公钥解密
     * @param string $encrypted
     * @return null
     */
    public static function publicDecrypt($encrypted = '')
 
    {
 
        if (!is_string($encrypted)) {
 
            return null;
 
        }
 
        return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null;
 
    }
 
}

类调用案例

$rsa = new Rsa();
$data['name'] = 'Tom';
$data['age'] = '20';
$privateEncrypt = $rsa->privateEncrypt(json_encode($data));
echo '私钥加密后:'.$privateEncrypt.'<br>';
$publicDecrypt = $rsa->publicDecrypt($privateEncrypt);
echo '公钥解密后:'.$publicDecrypt.'<br>';
 
 
$publicEncrypt = $rsa->publicEncrypt(json_encode($data));
echo '公钥加密后:'.$publicEncrypt.'<br>';
$privateDecrypt = $rsa->privateDecrypt($publicEncrypt);
echo '私钥解密后:'.$privateDecrypt;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值