php rsa 加密解密 thinkphp

462 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 php rsa 加密解密 thinkphp

<?php
namespace app\api\controller;
use app\BaseController;
use think\App;
 
class Base extends BaseController
{
	protected $request;
	protected $app;
    public $pi_key;
    public $pu_key;
	/**
     * 构造方法
     * @access public
     * @param  App  $app  应用对象
     */
    public function __construct(App $app)
    {
        $this->app     = $app;
        $this->request = $this->app->request;
		$this->initConfig();
        $this->pi_key =  openssl_pkey_get_private(config('my.private_key'));//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
        $this->pu_key = openssl_pkey_get_public(config('my.public_key'));//这个函数可用来判断公钥是否是可用的
		
    }
	public function __call($method, $args)
    {
        return json(['status'=>'01','msg'=>'方法不存在']);
    }
    //私钥加密
    /*public function PrivateEncrypt($data){
        openssl_private_encrypt($data,$encrypted,$this->pi_key);
        $encrypted = $this->urlsafe_b64encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        return $encrypted;
    }*/
 
    public function PrivateEncrypt($data){
        $crypto = '';
        foreach (str_split($data, 117) as $chunk) {
            openssl_private_encrypt($chunk, $encryptData, $this->pi_key);
            $crypto .= $encryptData;
        }
        $encrypted = $this->urlsafe_b64encode($crypto);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        return $encrypted;
    }
 
    //加密码时把特殊符号替换成URL可以带的内容
    function urlsafe_b64encode($string) {
        $data = base64_encode($string);
        $data = str_replace(array('+','/','='),array('-','_',''),$data);
        return $data;
    }
 
    //解密码时把转换后的符号替换特殊符号
    function urlsafe_b64decode($string) {
        $data = str_replace(array('-','_'),array('+','/'),$string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }
 
    //私钥加密的内容通过公钥可用解密出来
    public function PublicDecrypt($encrypted){
        $crypto = '';
        foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {
            openssl_public_decrypt($chunk, $decryptData, $this->pu_key);
            $crypto .= $decryptData;
        }
        //openssl_public_decrypt($encrypted,$decrypted,$this->pu_key);//私钥加密的内容通过公钥可用解密出来
        return $crypto;
    }
 
    //公钥加密
    public function PublicEncrypt($data){
        $crypto = '';
        foreach (str_split($data, 117) as $chunk) {
            openssl_public_encrypt($chunk, $encryptData, $this->pu_key);
            $crypto .= $encryptData;
        }
        $encrypted = $this->urlsafe_b64encode($crypto);
        return $encrypted;
    }
 
    //私钥解密
    public function PrivateDecrypt($encrypted){
        $crypto = '';
        foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {
            openssl_private_decrypt($chunk, $decryptData, $this->pi_key);
            $crypto .= $decryptData;
        }
        return $crypto;
    }
 
	
 
}