美文网首页
php -- RSA 加密解密工具类

php -- RSA 加密解密工具类

作者: 奈蜇 | 来源:发表于2020-02-28 20:02 被阅读0次

    话不多说,别问... 问就是踩坑了

    很多教程都是老的 MD!!! 对密文的长度有限制....
    这个没有 不限制长度 原理...太长了就砍断嘛

    <?php
    
    namespace fast;
    
    /**
     * RSA加解密类
     */
    class Rsa
    {
        public $publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYHGvdORdwsK5i+s9rKaMPL1O5eDK2XwNHRUWaxmGB/cxLxeinJrrqdAN+mME7XtGN9bklnOR3MUBQLVnWIn/IU0pnIJY9DpPTVc7x+1zFb8UUq1N0BBo/NpUG5olxuQULuAAHZOg28pnP/Pcb5XVEvpNKL0HaWjN8pu/Dzf8gZwIDAQAB';
        public $privateKey = 'MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJgca905F3CwrmL6z2spow8vU7l4MrZfA0dFRZrGYYH9zEvF6Kcmuup0A36YwTte0Y31uSWc5HcxQFAtWdYif8hTSmcglj0Ok9NVzvH7XMVvxRSrU3QEGj82lQbmiXG5BQu4AAdk6Dbymc/89xvldUS+k0ovQdpaM3ym78PN/yBnAgMBAAECgYAFdX+pgNMGiFC53KZ1AhmIAfrPPTEUunQzqpjE5Tm6oJEkZwXiedFbeK5nbLQCnXSH07nBT9AjNvFH71i6BqLvT1l3/ezPq9pmRPriHfWQQ3/J3ASf1O9F9CkYbq/s/qqkXEFcl8PdYQV0xU/kS4jZPP+60Lv3sPkLg2DpkhM+AQJBANTl+/v6sBqqQSS0Anl5nE15Ck3XGBcq0nvATHfFkJYtG9rrXz3ZoRATLxF1iJYwGSAtirhev9W7qFayjci0ztcCQQC25/kkFbeMEWT6/kyV8wcPIog1mKy8RVB9+2l6C8AzbWBPZYtLlB7uaGSJeZBTEGfvRYzpFm5xO0JqwCfDddjxAkBmxtgM3wqg9MwaAeSn6/Nu2x4EUfBJTtzp7P19XJzeQsyNtM73ttYwQnKYhRr5FiMrC5FKTENj1QIBSJV17QNlAkAL5cUAAuWgl9UQuo/yxQ81fdKMYfUCfiPBPiRbSv5imf/Eyl8oOGdWrLW1d5HaxVttZgHHe60NcoRce0la3oSRAkAe8OqLsm9ryXNvBtZxSG+1JUvePVxpRSlJdZIAUKxN6XQE0S9aEe/IkNDBgVeiUEtop76R2NkkGtGTwzbzl0gm';
    
        private $_pubKey;
        private $_priKey;
    
        /**
         * *
         * @param string $publicKey 公钥
         * @param string $privateKey 私钥
         */
        public function __construct($publicKey = null, $privateKey = null)
        {
            $this->setKey($publicKey, $privateKey);
        }
    
        /**
         * 设置公钥和私钥
         * @param string $publicKey 公钥
         * @param string $privateKey 私钥
         */
        public function setKey($publicKey = null, $privateKey = null)
        {
            if (!is_null($publicKey)) {
                $this->publicKey = $publicKey;
            }
            if (!is_null($privateKey)) {
                $this->privateKey = $privateKey;
            }
        }
    
        /**
         * * setup the public key
         */
        private function setupPubKey()
        {
            if (is_resource($this->_pubKey)) {
                return true;
            }
            $pem = chunk_split($this->publicKey, 64, "\n");
            $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
            $this->_pubKey = openssl_pkey_get_public($pem);
            return true;
        }
    
        /**
         * * setup the private key
         */
        private function setupPriKey()
        {
            if (is_resource($this->_priKey)) {
                return true;
            }
            $pem = chunk_split($this->privateKey, 64, "\n");
            $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";
            $this->_priKey = openssl_pkey_get_private($pem);
            return true;
        }
    
        /**
         * * 公钥加密
         * @param $data
         * @return 加密后的字符串
         */
        public function pubEncrypt($data)
        {
            if (!is_string($data)) {
                return null;
            }
            $this->setupPubKey();
            $crypto = '';
            foreach (str_split($data, 117) as $chunk) {
                openssl_public_encrypt($chunk, $encryptData, $this->_pubKey);
                $crypto .= $encryptData;
            }
            return base64_encode($crypto);
        }
    
        /**
         * * 私钥解密
         * @param $encrypted
         * @return 解密后的字符串
         */
        public function priDecrypt($encrypted)
        {
            if (!is_string($encrypted)) {
                return null;
            }
            $this->setupPriKey();
            $crypto = '';
            foreach (str_split(base64_decode($encrypted), 128) as $chunk) {
                openssl_private_decrypt($chunk, $decryptData, $this->_priKey);
                $crypto .= $decryptData;
            }
            return $crypto;
        }
    
        public function __destruct()
        {
            is_resource($this->_priKey) && @openssl_free_key($this->_priKey);
            is_resource($this->_pubKey) && @openssl_free_key($this->_pubKey);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:php -- RSA 加密解密工具类

          本文链接:https://www.haomeiwen.com/subject/vpjrhhtx.html