php openssl rsa 加密解密

  1.  
  2. // 注意先開啓 OpenSSL 擴展,php -m |grep openssl 確認
    
    class Rsa
    
    {
    
       private $privateKey = '';
    
       private $publicKey = '';
    
       public function __construct($privateKey, $publicKey = false)
    
       {
    
           if ($privateKey && openssl_pkey_get_private($privateKey)) {
    
               $this->privateKey = $privateKey;
    
           }
    
            throw new Exception('祕鑰信息不正確', 500);
    
           if ($publicKey) {
    
               if (openssl_pkey_get_public($publicKey)) {
    
                   $this->publicKey = $publicKey;
    
               }
    
               throw new Exception('公鑰信息不正確', 500);
    
           }
    
       }
    
       public function getPublicKey ()
    
       {
    
           return $this->publicKey;
    
       }
    
       /*
    
        * 服務端加密數據(使用私鑰加密, 客戶端公鑰能夠解密)
    
        */
    
       public function serverEncodeData($data)
    
       {
    
           $encryptData = '';
    
           if (is_array($data)) {
    
               openssl_private_encrypt(json_encode($data, true), $encryptData, $this->privateKey);
    
           } elseif (is_string($data)) {
    
               openssl_private_encrypt($data, $encryptData, $this->privateKey);
    
           }
    
           return base64_encode($encryptData);//加密後的內容一般含有特殊字符,須要編碼轉換下
    
       }
    
       /*
    
        * 客戶端解密數據(使用公鑰解密, 可解私鑰加密數據)
    
        */
    
       public function clientDecodeData($data)
    
       {
    
           $decryptData = '';
    
           if (!is_string($data)) throw new Exception('解密格式應爲字符串格式');
    
           if (!$this->publicKey) throw new Exception('客戶端解密須要提供公鑰');
    
           openssl_public_decrypt(base64_decode($data), $decryptData, $this->publicKey);
    
           return $decryptData;
    
       }
    
       /*
    
        * 客戶端加解數據(使用公鑰加密, 服務端私鑰可解密)
    
        */
    
       public function clientEncodeData($data)
    
       {
    
           $encryptData = '';
    
           if (!$this->publicKey) throw new Exception('客戶端加密須要提供公鑰');
    
           if (is_array($data)) {
    
               openssl_public_encrypt(json_encode($data, true), $encryptData, $this->publicKey);
    
           } else if (is_string($data)) {
    
               openssl_public_encrypt($data, $encryptData, $this->publicKey);
    
           }
    
           return base64_encode($encryptData);//加密後的內容一般含有特殊字符,須要編碼轉換下
    
       }
    
       /*
    
        * 服務端解密數據(使用私鑰解密, 公鑰加密數據私鑰可解)
    
        */
    
       public function serverDecodeData($data)
    
       {
    
           $decryptData = '';
    
           if (!is_string($data)) throw new Exception('解密格式應爲字符串格式');
    
           openssl_private_decrypt(base64_decode($data), $decryptData, $this->privateKey);
    
           return json_decode($decryptData, true);
    
       }
    
    }
    
    // 工具生成的祕鑰 加個開頭和結尾 每行64字符換行
    
    // https://docs.open.alipay.com/58/103242 https://docs.open.alipay.com/291/106097
    
    $rsa = new Rsa('-----BEGIN RSA PRIVATE KEY-----
    
    MIICXAIBAAKBgQDHngAxxMArpym+hgNreSVrF34JOrPo07DicaOQgzErJOlihtgf
    
    EFml8UR+0vPmyLmoXPSYX7VGnOryQmedn5iWoy8cV7MRwZsaIUwNQc2tTHq4EdXi
    
    zuY1w22r04eCjfqYcksIXBedUGJyA7RCOmioqxRKlq4Da0COgq/M3tTcbwIDAQAB
    
    AoGAL3RkX3CCrt4CkoSRc49NUfQ3xkHqW0NYHb0eQVCu867GvOGJp3jflw+QVQYZ
    
    bZfyaxAOJds64RqU0BrxPwud3mYvJEIYmvGGwAelUNY/0DOho9NOlLniwbkBxEoy
    
    wUU6bRwQ8bELbhlPvoT9VoCCtkZ7uP+Ux7bffCrQB7Z+yAECQQDu8cT+x/mbN1vh
    
    +PfcuM6wz5Xorq+pnQaTDbES+ZT2NukIwk1y2RSmULIlXDRxsOTKGBLEedk6HmGB
    
    QM/I8xVvAkEA1d2a5IExncjeadOiYftT79UTOb35GkClf5UQcSyILdH5kzxk6OWv
    
    9LP2V72sah6Dg59bUv8BL19AGAowtD0pAQJBAKMEf4nzlO+4jQ9WdIQ58Ynflj7x
    
    Lxdg8iNRrAVuEZsJS2OWbJB2Wgg99cxXY9BNB0p5shQprXJhV9R/C0Pl1DECQERl
    
    +4PZTeUIuRlfdi+gEdhCbUOqXmDnDAchxYBsnaEJ5qgQSLWzv/KjG8Y0A1BtMeKG
    
    tM52gAqGjBkkKS974AECQHw37eeYnY90prE5cNCnHDWJhk2uAK8yxmAOJezlKs4I
    
    0fKonrujwuJVOMT0Asnia5pQTS93RwmePy9RECRzxak=
    
    -----END RSA PRIVATE KEY-----','-----BEGIN PUBLIC KEY-----
    
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHngAxxMArpym+hgNreSVrF34J
    
    OrPo07DicaOQgzErJOlihtgfEFml8UR+0vPmyLmoXPSYX7VGnOryQmedn5iWoy8c
    
    V7MRwZsaIUwNQc2tTHq4EdXizuY1w22r04eCjfqYcksIXBedUGJyA7RCOmioqxRK
    
    lq4Da0COgq/M3tTcbwIDAQAB
    
    -----END PUBLIC KEY-----');
    
    $data = $rsa->serverEncodeData(['id'=>1,'name'=>'jay']);
    
    //"L1yto67q+LEVcB9gvfYHFqXGZ9irHXuhrxbzuRS71im4dNkVUB4t2BbdpwNux+SsakbV8T+eaTHsl0Im999y03ot/xV2jApzMILZoU+aNoDtZlKjue+gNm+O6uCcycYIeYOt1X8rTmuvmgVd3cmhqlNKegC3NDtBWOumJ9JiYJ8="
    
    $data = $rsa->clientDecodeData($data);//"{"id":1,"name":"jay"}"
    
    $data2 = $rsa->clientEncodeData(['id'=>1,'name'=>'jay']));
    
    //"vbHbTr1v/O10G7rStTVfubcnX+6/oUBWaeB+/IRWP1dacFIxzpzISXCs8yHix3+6MK4h6GZ9P3HWLqYTiyHHGmO9MnPV4vQ0gHBzw0wolvVpfwIEonuulg8dzh/D1Kx10dn7r3HQDLWlhAPmGVHLfGQqUlDE1WNwH6ptdJuVyzc="
    
    $data2 = $rsa->serverDecodeData($data2);//"{"id":1,"name":"jay"}"

     

openssl工具生成私鑰和公鑰,也能夠命令行生成php

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相關文章
相關標籤/搜索