• 技术文章 >后端开发 >PHP7

    php7.2中mcrypt转openssl的方法详解

    藏色散人藏色散人2020-01-10 14:36:16转载1595
    在php7.2中mcrypt已经被废弃了。

    用openssl代替它。

    例如

    public function desEncrypt($str,$key) {
         $iv = $key;
             $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
             $str = $this->_pkcs5_pad ( $str, $size );
             return strtoupper( bin2hex( mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_CBC, $iv ) ) );
         }
         
    public function desDecrypt($str,$key) {
         $iv = $key;
             $strBin = $this->_hex2bin( strtolower( $str ) );
             $str = mcrypt_decrypt( MCRYPT_DES, $key, $strBin, MCRYPT_MODE_CBC, $iv );
             $str = $this->_pkcs5_unpad( $str );
             return $str;
         }
     
    private function _pkcs5_pad($text,$block=8){
             $pad = $block - (strlen($text) % $block);
             return $text . str_repeat(chr($pad), $pad);
         }
         
    private function _pkcs5_unpad($text) {
            $pad = ord($text{strlen($text)-1});
            if ($pad > strlen($text)) return $text;
            if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return $text;
            return substr($text, 0, -1 * $pad);
         }

    替换后:

    //要改的加密
        public function desEncrypt($str,$key) {
          //   $b = openssl_get_cipher_methods();
          //   echo '<pre>';
          //   print_r($b);
         $iv = $key;
          //    $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
          //    var_dump($size);exit;
          //    $str = $this->_pkcs5_pad ( $str, $size );
     
             // return strtoupper( bin2hex( mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_CBC, $iv ) ) );
            $data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv);
            $data = strtolower(bin2hex($data));
            return $data;
         }
         
        //要改的解密
        public function desDecrypt($str,$key) {
         $iv = $key;
          //    $strBin = $this->_hex2bin( strtolower( $str ) );
          //    $str = mcrypt_decrypt( MCRYPT_DES, $key, $strBin, MCRYPT_MODE_CBC, $iv );
          //    $str = $this->_pkcs5_unpad( $str );
          //    return $str;
            return openssl_decrypt (hex2bin($str), 'DES-CBC', $key, OPENSSL_RAW_DATA,$iv);
         }

    这些网上都有,在作者使用的过程中因为使用的是MCRYPT_DES,无法得知openssl对应的是那种加密方式,所以通过手册找到了openssl_get_cipher_methods();该方法可以找出openssl支持的所有方法,进行替换即可。

    echo '<pre>';
    $a = openssl_get_cipher_methods();
    print_r($a);
     
    Array
    (
        [0] => AES-128-CBC
        [1] => AES-128-CFB
        [2] => AES-128-CFB1
        [3] => AES-128-CFB8
        [4] => AES-128-CTR
        [5] => AES-128-ECB
        [6] => AES-128-OFB
        [7] => AES-128-XTS
        [8] => AES-192-CBC
        [9] => AES-192-CFB
        [10] => AES-192-CFB1
        [11] => AES-192-CFB8
        [12] => AES-192-CTR
        [13] => AES-192-ECB
        [14] => AES-192-OFB
        [15] => AES-256-CBC
        [16] => AES-256-CFB
        [17] => AES-256-CFB1
        [18] => AES-256-CFB8
        [19] => AES-256-CTR
        [20] => AES-256-ECB
        [21] => AES-256-OFB
        [22] => AES-256-XTS
        [23] => BF-CBC
        [24] => BF-CFB
        [25] => BF-ECB
        [26] => BF-OFB
        [27] => CAMELLIA-128-CBC
        [28] => CAMELLIA-128-CFB
        [29] => CAMELLIA-128-CFB1
        [30] => CAMELLIA-128-CFB8
        [31] => CAMELLIA-128-ECB
        [32] => CAMELLIA-128-OFB
        [33] => CAMELLIA-192-CBC
        [34] => CAMELLIA-192-CFB
        [35] => CAMELLIA-192-CFB1
        [36] => CAMELLIA-192-CFB8
        [37] => CAMELLIA-192-ECB
        [38] => CAMELLIA-192-OFB
        [39] => CAMELLIA-256-CBC
        [40] => CAMELLIA-256-CFB
        [41] => CAMELLIA-256-CFB1
        [42] => CAMELLIA-256-CFB8
        [43] => CAMELLIA-256-ECB
        [44] => CAMELLIA-256-OFB
        [45] => CAST5-CBC
        [46] => CAST5-CFB
        [47] => CAST5-ECB
        [48] => CAST5-OFB
        [49] => DES-CBC
        [50] => DES-CFB
        [51] => DES-CFB1
        [52] => DES-CFB8
        [53] => DES-ECB
        [54] => DES-EDE
        [55] => DES-EDE-CBC
        [56] => DES-EDE-CFB
        [57] => DES-EDE-OFB
        [58] => DES-EDE3
        [59] => DES-EDE3-CBC
        [60] => DES-EDE3-CFB
        [61] => DES-EDE3-CFB1
        [62] => DES-EDE3-CFB8
        [63] => DES-EDE3-OFB
        [64] => DES-OFB
        [65] => DESX-CBC
        [66] => IDEA-CBC
        [67] => IDEA-CFB
        [68] => IDEA-ECB
        [69] => IDEA-OFB
        [70] => RC2-40-CBC
        [71] => RC2-64-CBC
        [72] => RC2-CBC
        [73] => RC2-CFB
        [74] => RC2-ECB
        [75] => RC2-OFB
        [76] => RC4
        [77] => RC4-40
        [78] => RC4-HMAC-MD5
        [79] => SEED-CBC
        [80] => SEED-CFB
        [81] => SEED-ECB
        [82] => SEED-OFB
        [83] => aes-128-cbc
        [84] => aes-128-cfb
        [85] => aes-128-cfb1
        [86] => aes-128-cfb8
        [87] => aes-128-ctr
        [88] => aes-128-ecb
        [89] => aes-128-gcm
        [90] => aes-128-ofb
        [91] => aes-128-xts
        [92] => aes-192-cbc
        [93] => aes-192-cfb
        [94] => aes-192-cfb1
        [95] => aes-192-cfb8
        [96] => aes-192-ctr
        [97] => aes-192-ecb
        [98] => aes-192-gcm
        [99] => aes-192-ofb
        [100] => aes-256-cbc
        [101] => aes-256-cfb
        [102] => aes-256-cfb1
        [103] => aes-256-cfb8
        [104] => aes-256-ctr
        [105] => aes-256-ecb
        [106] => aes-256-gcm
        [107] => aes-256-ofb
        [108] => aes-256-xts
        [109] => bf-cbc
        [110] => bf-cfb
        [111] => bf-ecb
        [112] => bf-ofb
        [113] => camellia-128-cbc
        [114] => camellia-128-cfb
        [115] => camellia-128-cfb1
        [116] => camellia-128-cfb8
        [117] => camellia-128-ecb
        [118] => camellia-128-ofb
        [119] => camellia-192-cbc
        [120] => camellia-192-cfb
        [121] => camellia-192-cfb1
        [122] => camellia-192-cfb8
        [123] => camellia-192-ecb
        [124] => camellia-192-ofb
        [125] => camellia-256-cbc
        [126] => camellia-256-cfb
        [127] => camellia-256-cfb1
        [128] => camellia-256-cfb8
        [129] => camellia-256-ecb
        [130] => camellia-256-ofb
        [131] => cast5-cbc
        [132] => cast5-cfb
        [133] => cast5-ecb
        [134] => cast5-ofb
        [135] => des-cbc
        [136] => des-cfb
        [137] => des-cfb1
        [138] => des-cfb8
        [139] => des-ecb
        [140] => des-ede
        [141] => des-ede-cbc
        [142] => des-ede-cfb
        [143] => des-ede-ofb
        [144] => des-ede3
        [145] => des-ede3-cbc
        [146] => des-ede3-cfb
        [147] => des-ede3-cfb1
        [148] => des-ede3-cfb8
        [149] => des-ede3-ofb
        [150] => des-ofb
        [151] => desx-cbc
        [152] => id-aes128-GCM
        [153] => id-aes192-GCM
        [154] => id-aes256-GCM
        [155] => idea-cbc
        [156] => idea-cfb
        [157] => idea-ecb
        [158] => idea-ofb
        [159] => rc2-40-cbc
        [160] => rc2-64-cbc
        [161] => rc2-cbc
        [162] => rc2-cfb
        [163] => rc2-ecb
        [164] => rc2-ofb
        [165] => rc4
        [166] => rc4-40
        [167] => rc4-hmac-md5
        [168] => seed-cbc
        [169] => seed-cfb
        [170] => seed-ecb
        [171] => seed-ofb
    )

    希望对您有用。

    更多相关PHP7文章请访问:《PHP7》教程

    以上就是php7.2中mcrypt转openssl的方法详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:php7
    上一篇:编译PHP7扩展(以memcached为例) 下一篇:php7+的php-fpm参数配置(注意事项)
    大前端线上培训班

    相关文章推荐

    • PHP7.4 新特性和废弃的功能(总结)• 关于PHP7.3.10的编译安装• PHP7 OpenSSL DES-EDE-CBC加解密• 编译PHP7扩展(以memcached为例)

    全部评论我要评论

  • 化成风

    这个key只能是8怎么处理

    2021-03-04

  • 取消发布评论发送
  • 1/1

    PHP中文网