PHP7.1 OpenSSL_encrypt 替换 Mcrypt_encrypt 的方法

  • 2018-8-14 14:48
  • PHP二次开发
  • 阅读(248)
  • 评论(6
  • 来源:互联网
  • 摘要: 工具类:?phpclass DesEncrypt { private $key = ""; private $iv = ""; /** * 构造,传递二个已经进行base64_encode的KEY与IV * * @param string $key * @param string $iv */ function __construct ($key ...
    工具类:

    <?php
    class DesEncrypt {
        private $key = "";
        private $iv = "";

        /**
         * 构造,传递二个已经进行base64_encode的KEY与IV
         *
         * @param string $key
         * @param string $iv
         */
        function __construct ($key, $iv)
        {
            if (empty($key) || empty($iv)) {
                echo 'key and iv is not valid';
                exit();
            }
            $this->key = $key;
            $this->iv = $iv;
        }

        /**
         * @title 加密
         * @author gaowei
         * @date 2017/12/18
         * @param string $value 要传的参数
         * @ //OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING //AES-128-ECB|AES-256-CBC|BF-CBC
         * @return json
         * */
        public function encrypt ($value) {
            $value = $this->PaddingPKCS7($value);
            $key = $this->key;
            $iv  = $this->iv;
            //AES-128-ECB|不能用 AES-256-CBC|16 AES-128-CBC|16 BF-CBC|8 aes-128-gcm|需要加$tag  DES-EDE3-CBC|8
            $cipher = "DES-EDE3-CBC";
            if (in_array($cipher, openssl_get_cipher_methods())) {
                $result = openssl_encrypt($value, $cipher, $key, OPENSSL_SSLV23_PADDING, $iv);
            }
            return $result;
        }

        /**
         * @title 解密
         * @author gaowei
         * @date 2017/12/18
         * @param string $value 要传的参数
         * @return json
         * */
        public function decrypt ($value) {
            $key       = $this->key;
            $iv        = $this->iv;
            $decrypted = openssl_decrypt($value, 'DES-EDE3-CBC', $key, OPENSSL_SSLV23_PADDING, $iv);
            $ret = $this->UnPaddingPKCS7($decrypted);
            return $ret;
        }

        private function PaddingPKCS7 ($data) {
            $block_size = 8;
            $padding_char = $block_size - (strlen($data) % $block_size);
            $data .= str_repeat(chr($padding_char), $padding_char);
            return $data;
        }

        private function UnPaddingPKCS7($text) {
            $pad = ord($text{strlen($text) - 1});
            if ($pad > strlen($text)) {
                return false;
            }
            if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
                return false;
            }
            return substr($text, 0, - 1 * $pad);
        }
    }

    使用方法:
    include "DesEncrypt.php";

    $str = '{"type":"test","user_id":"000"}';
    $des = new DesEncrypt("1234567890","01234567");
    echo $des->encrypt($str);
    echo "<br>";
    echo $des->decrypt("VsewcF6I94fHLZhrFYohB52GgASfdDeQJLZnr3C2AeE=");


    PHP技术交流QQ群:422137578

    除非注明,文章均为 PHP二次开发 原创,转载请注明本文地址:http://www.php2.cc/article-2691-1.html

    相关阅读

    发表评论

    最新评论

    引用 阿里下拉宝   2018-9-11 15:05
    php正在学习,感谢分享
    引用 猿笔记   2018-9-2 09:00
    不错的文章,感谢博主分享!
    引用 体育用品   2018-8-31 19:20
    我也正在学PHP!~
    引用 分板机   2018-8-22 17:28
    确实不错,谢谢分享
    引用 卢松松博客   2018-8-21 20:37
    分享的不错,值得一看!
    引用 SUGAR   2018-8-17 16:22
    写的真好,支持支持

    查看全部评论(6)

    用户名:  *

    邮 箱:  *

    网 址: 注意加上“http://”哦!