PHP 数据传输加密解密

RSA.PHP

  public function __construct()
    {
        $priv_key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/rsa_private.key');
        $pub_key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/rsa_public.key');
//        $priv_key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/private.key');
//        $pub_key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/public.pem');
//        $pub_key = $this->publicKey;
        $this->privateKey = openssl_pkey_get_private($priv_key);//私钥,用于加密
        $this->publicKey = openssl_pkey_get_public($pub_key);//公钥,用于解密*/
    }

    /**
     * 私钥加密
     * @param 原始数据 $data
     * @return 密文结果 string
     */
    public function encryptByPrivateKey($data)
    {
        openssl_private_encrypt($data, $encrypted, $this->privateKey, OPENSSL_PKCS1_PADDING);//私钥加密
        $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        return $encrypted;
    }

    /**
     * 私钥解密
     * @param 密文数据 $data
     * @return 原文数据结果 string
     */
    public function decryptByPrivateKey($data)
    {
        $data = base64_decode($data);
        openssl_private_decrypt($data, $encrypted, $this->privateKey, OPENSSL_PKCS1_PADDING);//私钥解密
        return $encrypted;
    }

    /**
     * 私钥签名
     * @param unknown $data
     */
    public function signByPrivateKey($data)
    {
        openssl_sign($data, $signature, $this->privateKey);
        $encrypted = base64_encode($signature);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        return $encrypted;
    }


    /**
     * 公钥加密
     * @param 原文数据 $data
     * @return 加密结果 string
     */
    public function encryptByPublicKey($data)
    {
        openssl_public_encrypt($data, $decrypted, $this->publicKey, OPENSSL_PKCS1_PADDING);//公钥加密
        return base64_encode($decrypted);
    }

    /**
     * 公钥解密
     * @param 密文数据 $data
     * @return 原文结果 string
     */
    public function decryptByPublicKey($data)
    {
        $data = base64_decode($data);
        openssl_public_decrypt($data, $encrypted, $this->publicKey, OPENSSL_PKCS1_PADDING);//公钥解密
        return $encrypted;
    }

    /**
     * 公钥验签
     * @param unknown $data
     * @param unknown $sign
     */
    public function verifyByPublicKey($data, $sign)
    {
        $sign = base64_decode($sign);
        return openssl_verify($data, $sign, $this->publicKey);
    }

    public function __destruct()
    {
        openssl_free_key($this->privateKey);
        openssl_free_key($this->publicKey);
    }

AES.PHP 加密

class AES extends Controller
{
    protected $key;
    protected $method;
    protected $iv;
    protected $options;
    public function __construct($key, $method = 'AES-128-ECB', $iv = '', $options = OPENSSL_RAW_DATA )
    {
        $this->key = isset($key) ? $key : exit('key为必须项');
        $this->method = $method;
        $this->iv = $iv;
        $this->options = $options;
    }

    /**
     *
     * @param string $string 需要加密的字符串
     * @return string
     */
    public function encrypt( $string )
    {
        /*$key = substr(openssl_digest(openssl_digest($string, 'sha1', true), 'sha1', true), 0, 16);
        $data = openssl_encrypt($string, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
        return urlencode(base64_encode($data));*/
        /*if (strlen($string) % 16) {
            $string = str_pad($string,strlen($string) + 16 - strlen($string) % 16, "\0");
        }
        $encrypted =  openssl_encrypt($string, 'AES-128-ECB',$this->key,OPENSSL_ZERO_PADDING,$this->iv);
        return base64_encode($encrypted);*/
        return base64_encode(openssl_encrypt($string, $this->method,$this->key,$this->options,$this->iv));
    }

    /**
     * @param string $string 需要解密的字符串
     * @param string $key 密钥
     * @return string
     */
    public function decrypt($string)
    {
        return openssl_decrypt(base64_decode($string), $this->method, $this->key, $this->options,$this->iv);
    }
}

工具类

 public $RSA = 'rsa';
    public $AES_128 = 'aes_128';

    /**
     * 加密
     * @param $value
     * @param string $key
     * @param $type
     * @return \app\common\library\加密结果|null|string
     */
    public static function encrypt($value, $type, $key = '')
    {
        switch ($type) {
            case  'aes_128':
                $rsa = new AES($key);
                return $rsa->encrypt($value);
            case 'rsa':
                $rsa = new RSA();
                return $rsa->encryptByPublicKey($value);
            default:
                return null;
        }
    }

    /**
     * 解密
     * @param $value
     * @param $type
     * @param string $key
     * @return 原文数据结果|string|null
     */
    public static function decrypt($value, $type, $key = '')
    {
        switch ($type) {
            case  'aes_128':
                $rsa = new AES($key);
                return $rsa->decrypt($value);
            case 'rsa':
                $rsa = new RSA();
                return $rsa->decryptByPrivateKey($value);
            default:
                return null;
        }
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值