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==

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

阅读 15.9k
5 个回答

后面的结果是不是忘了 base64_encode

应该是 PKCS#7 和 PKCS#5 的区别。

<?php 

$key = "anotherpassword1";
$str = "does it work 12";

$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."\1", MCRYPT_MODE_ECB);
$dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB);
echo(bin2hex($enc).PHP_EOL);
var_dump($dec);

$enc = openssl_encrypt($str, 'bf-ecb', $key, true);
$dec = openssl_decrypt($enc, 'bf-ecb', $key, true);
echo(bin2hex($enc).PHP_EOL);
var_dump($dec);

?>

参考
https://stackoverflow.com/que...

password_hash,password_verify是否满足你的需求

新手上路,请多包涵
<?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"));
新手上路,请多包涵

同样遇到这个问题,用 openssl_encrypt()替代

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏