解密php 7.2中的数据,该数据使用AES在php 5.6中加密

时间:2019-03-07 07:34:03

标签: php encryption

我使用以下方法对php应用程序和android应用程序之间的数据进行加密和解密,在php 5.6中工作正常,升级到php 7.2后它停止工作,现在我暂时回到了php 5.6。 我知道php mcrypt已贬值。 现在我的问题是我无法更新Android App,我必须在服务器端以某种方式解决此问题,我已经在服务器端预定义了 key iv 作为应用程序,我该怎么做,以便可以使用相同的键和iv以及在php 7.2中在服务器端加密和解密数据。 预先感谢

 class MCrypt
        {
                private $key = 'Some Key'; 
                private $iv = 'Some IV'; 


                function __construct()
                {
                }

                function encrypt($str) {

                  //$key = $this->hex2bin($key);    
                  $iv = $this->iv;

                  $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);

                  mcrypt_generic_init($td, $this->key, $iv);
                  $encrypted = mcrypt_generic($td, $str);

                  mcrypt_generic_deinit($td);
                  mcrypt_module_close($td);

                  return bin2hex($encrypted);
                }

                function decrypt($code) {
                  //$key = $this->hex2bin($key);
                  $code = $this->hex2bin($code);
                  $iv = $this->iv;

                  $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);

                  mcrypt_generic_init($td, $this->key, $iv);
                  $decrypted = mdecrypt_generic($td, $code);

                  mcrypt_generic_deinit($td);
                  mcrypt_module_close($td);

                  return utf8_encode(trim($decrypted));
                }

                protected function hex2bin($hexdata) {
                  $bindata = '';

                  for ($i = 0; $i < strlen($hexdata); $i += 2) {
                        $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
                  }

                  return $bindata;
                }

        }

2 个答案:

答案 0 :(得分:1)

您需要分析存储有这种加密数据的影响表的列表。

现在从该表中创建一个类似select *的程序,并解密这些数据并使用更新查询对其进行更新。

以5.6 PHP版本运行此程序,现在尝试使用OpenSSL修改加密逻辑并重新更新表。

没有像函数或类方法那样简单的方法来实现从5.6到7.2的转换。

答案 1 :(得分:0)

mcrypt在7.2中已弃用,默认情况下不包括。但是,您仍然可以根据需要手动安装mcrypt。您也可以改用openssl_encrypt()和openssl_decrypt()。