|  在技术加营销的道路上越走越远
温馨提示
我是弹窗内容
当前位置:首页 > PHP经验积累 > PHP7.1废弃mcrypt扩展后,该怎么改成openssl的函数呢?
PHP7.1废弃mcrypt扩展后,该怎么改成openssl的函数呢?

PHP7.1废弃mcrypt扩展后,该怎么改成openssl的函数呢?

日期:2018-03-26 浏览量:1628 原创作者:湖八爷
从 PHP 7.0 升级到 PHP 7.1 废弃了一个在过去普遍应用的扩展(mcrypt),但是微信官方提供的消息加密解密算法中的核心部分中确实使用 mcrypt 的,Prpcrypt class 的加密方法(encrypt)和解密方法(decrypt),那该怎么改成 openssl 的函数呢?


/**

* 对明文进行加密

* @param string $text 需要加密的明文

* @return string 加密后的密文

*/

public function encrypt($text, $appid) {

try {

$iv = substr($this->key, 0, 16);

$encrypted = openssl_encrypt($text,'AES-256-CBC',$this->key,OPENSSL_ZERO_PADDING,$iv);

return array(ErrorCode::$OK, $encrypted);

} catch (Exception $e) {

//print $e;

return array(ErrorCode::$EncryptAESError, null);

}

}


/**

* 对密文进行解密

* @param string $encrypted 需要解密的密文

* @return string 解密得到的明文

*/

public function decrypt($encrypted, $appid) {

try {

$iv = substr($this->key, 0, 16);

$decrypted = openssl_decrypt($encrypted,'AES-256-CBC',$this->key,OPENSSL_ZERO_PADDING,$iv);

} catch (Exception $e) {

return array(ErrorCode::$DecryptAESError, null);

}

}



以上就是我的代码实例,仅供大家参考。如果我们自己使用,建议是直接使用PHP7.1+openssl扩展,我这里也有一个封装好的类,可以参考,使用前需要先安装好openssl扩展。


class des {

/**

* des-ecb加密

* @param string $data 要被加密的数据

* @param string $key 加密密钥

*/

function des_ecb_encrypt($data, $key){

return openssl_encrypt($data, 'des-ecb', $key);

}

/**

* des-ecb解密

* @param string $data 加密数据

* @param string $key 加密密钥

*/

function des_ecb_decrypt($data, $key){

return openssl_decrypt($data, 'des-ecb', $key);

}

/**

* des-cbc加密

* @param string $data 要被加密的数据

* @param string $key 加密使用的key

* @param string $iv 初始向量

*/

function des_cbc_encrypt($data, $key, $iv){

return openssl_encrypt($data, 'des-cbc', $key, 0, $iv);

}

/**

* des-cbc解密

* @param string $data 加密数据

* @param string $key 加密使用的key

* @param string $iv 初始向量

*/

function des_cbc_decrypt($data, $key, $iv){

return openssl_decrypt($data, 'des-cbc', $key, 0, $iv);

}

}