微信公众号之安全模式下消息加解密

在开发微信公众号的时候,发现微信安全模式下,官方提供的demo中,加解密的方式还是用的Mcrypt扩展方式,但是在PHP7.1以上已经废弃了该方式,从而只能利用openssl来代替Mcrypt方式进行加解密

加密的Mcrypt扩展原代码为:

$random = $this->getRandomStr();
$text = $random . pack("N", strlen($text)) . $text . $appid;
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = substr($this->key, 0, 16);
$pkc_encoder = new PKCS7Encoder;
$text = $pkc_encoder->encode($text);
mcrypt_generic_init($module, $this->key, $iv);
$encrypted = mcrypt_generic($module, $text);
mcrypt_generic_deinit($module);
mcrypt_module_close($module)

将其修改为openssl的代码为:

$random = $this->getRandomStr();
$text = $random . pack("N", strlen($text)) . $text . $appid;
$iv = substr($this->key, 0, 16);
$pkc_encoder = new PKCS7Encoder;
$text = $pkc_encoder->encode($text);
$encrypted = openssl_encrypt($text, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

解密的Mcrypt扩展原代码为:

$ciphertext_dec = base64_decode($encrypted);
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = substr($this->key, 0, 16);
mcrypt_generic_init($module, $this->key, $iv);
$decrypted = mdecrypt_generic($module, $ciphertext_dec);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);

将其修改为openssl的代码为:

$ciphertext_dec = base64_decode($encrypted);
$iv = substr($this->key, 0, 16);
$decrypted = openssl_decrypt($ciphertext_dec, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

同时tp5开发的时候,是命名空间引入,在使用DOMDocument类时,因它是全局命名空间中的一个类。要从本地名称空间中的全局名称空间引用类,必须使用完全限定名称或将其导入本地名称空间:如:$xml = new \DOMDocument();或者在开始就 use \DOMDocument;然后再$xml = new DOMDocument;两种方式都行

记录下,免得下次又忘记了!

 

 

 

 

 

posted @ 2020-09-27 12:17  絮风幻影  阅读(799)  评论(0)    收藏  举报