php7.1 mcrypt_encrypt 用什么替代

现在程序中有这样一行代码

    
    $encrypted = mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128, 
        "1234567890123456", 
        "123456", 
        MCRYPT_MODE_CBC,
        "1234567890123456"
    );
    
    echo base64_encode($encrypted);
    
    // 得到的结果为 QEwd/DWmy/4yGncCqBofQQ==
    

但是在 php7.1.*mcrypt_encrypt 函数已经不允许使用,所以想请问各位我应该用什么方法得到同样的结果,在网上搜索有人说用 openssl_encrypt 函数替代,但是我测试了一圈还是不能得到正确的结果;


    echo openssl_encrypt(
        "123456", 
        "AES-128-CBC", 
        "1234567890123456", 
        null, 
        "1234567890123456"
    );
    
    // 得到的结果为 1jdzWuniG6UMtoa3T6uNLA==

各位有遇到过这样的问题吗,最后是怎么解决的。

阅读 10.4k
评论
    5 个回答
    • 2
    • 新人请关照
    <?php
    function pkcs7_pad($str)
    {
        $len = mb_strlen($str, '8bit');
        $c = 16 - ($len % 16);
        $str .= str_repeat(chr($c), $c);
        return $str;
    }
    
    echo base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "1234567890123456", pkcs7_pad("123456"), MCRYPT_MODE_CBC, "1234567890123456"));
    
    echo base64_encode(openssl_encrypt("123456","AES-128-CBC","1234567890123456",OPENSSL_RAW_DATA,"1234567890123456"));