将mcrypt_generic转换为openssl_encrypt [英] Convert mcrypt_generic to openssl_encrypt
本文介绍了将mcrypt_generic转换为openssl_encrypt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
PHP
不再支持mcrypt
.我必须做出一个具有完全相同输出的OpenSSL替代方案,因为我只能访问一半的代码库.我的尝试都失败了.如您所见,以下操作系统与MC不匹配.我尝试了不同的 $methods
和OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
的组合.
PHP
no longer supports mcrypt
. I have to make an OpenSSL alternative that has the exact same output as I only have access to half the code base. My attempts have all failed. As you can see below OS doesn't match MC. I've tried different $methods
and combinations of OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
.
我要去哪里错了?
const n = "\n";
$text= 'hello my friends';
$method = 'AES-128-CBC';
$key = base64_decode('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
$text = base64_decode('MDEyMzQ1Njc4OUFCQ0RFRgAAAAYxMjM0NTYxMjMDAwM=');
$size = openssl_cipher_iv_length($method);
$iv = substr($key, 0, $size);
// MCRYPT METHOD
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($module, $key, $iv);
$mcrypt = mcrypt_generic($module, $text);
// OPENSSL METHOD
$method = 'AES-128-CBC';
$openssl = openssl_encrypt($text, $method, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
echo "MC: " . base64_encode($mcrypt) . n;
echo "OS: " . base64_encode($openssl) . n;
/*
MC: 9+gMhSSAHhJ4g4rdjwP02YQJTfU2qEThBco+W9ob9UU=
OS: Qsz5HitF4X+2DV48wh7ExCjWjGEOAl88MKXk/g24Z/I=
*/
推荐答案
Mcrypts: MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC
等效于:
OPENSSL: AES-256-CBC
我不知道为什么会有区别,但是更改128 to 256
可以为我解决.
I have no idea why there's the difference, but changing the 128 to 256
solved it for me.
这篇关于将mcrypt_generic转换为openssl_encrypt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文