当前位置:   article > 正文

php微信aes解密,分享一篇微信开发之数据解密的实例教程

aeskey 微信 image url

最近在用thinkphp框架写微信小程序的服务端,可能真的是处女座的缘故,从官方下载了一个php的微信解密demo,明明能整合成一个类也没多少代码的,非要分几个类来写,考虑到thinkphp 5.0的框架对于扩展的类引用路劲看着太蛋疼,所以就整合成了一个类,方便调用,有需要的朋友可以download。

1a76bbc5934a11298200ca97d66f5c57.png

百度盘下载地址:

pan.baidu.com/s/1kURMQ2b<?php

/**

* 对微信小程序用户加密数据的解密示例代码.

*

* @copyright Copyright (c) 1998-2014 Tencent Inc.

*/

class WXBizDataCrypt

{

private $appid;

private $sessionKey;

private $blockSize = 16;

private $OKs = 0;

private $IllegalAesKey = -41001;

private $IllegalIv = -41002;

private $IllegalBuffer = -41003;

private $DecodeBase64Error = -41004;

/**

* 检验数据的真实性,并且获取解密后的明文.

* @param $encryptedData string 加密的用户数据

* @param $iv string 与用户数据一同返回的初始向量

* @param $data string 解密后的原文

*

* @return int 成功0,失败返回对应的错误码

*/

public function decryptData($appid,$sessionKey,$encryptedData, $iv, &$data )

{

$this->sessionKey = $sessionKey;

$this->appid = $appid;

if (strlen($this->sessionKey) != 24) {

return $this->IllegalAesKey;

}

$aesKey=base64_decode($this->sessionKey);

if (strlen($iv) != 24) {

return $this->IllegalIv;

}

$aesIV=base64_decode($iv);

$aesCipher=base64_decode($encryptedData);

$result = $this->decrypt($aesKey,$aesCipher,$aesIV);

if ($result[0] != 0) {

return $result[0];

}

$dataObj=json_decode( $result[1] );

if( $dataObj == NULL )

{

return $this->IllegalBuffer;

}

if( $dataObj->watermark->appid != $this->appid )

{

return $this->IllegalBuffer;

}

$data = $result[1];

return $this->OKs;

}

/**

* 对密文进行解密

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

* @param string $aesIV 解密的初始向量

* @return string 解密得到的明文

*/

private function decrypt($key, $aesCipher, $aesIV )

{

try {

$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

mcrypt_generic_init($module, $key, $aesIV);

//解密

$decrypted = mdecrypt_generic($module, $aesCipher);

mcrypt_generic_deinit($module);

mcrypt_module_close($module);

} catch (Exception $e) {

return array($this->IllegalBuffer, null);

}

try {

//去除补位字符

$result = $this->decode($decrypted);

} catch (Exception $e) {

//print $e;

return array($this->IllegalBuffer, null);

}

return array(0, $result);

}

/**

* 对需要加密的明文进行填充补位

* @param $text 需要进行填充补位操作的明文

* @return 补齐明文字符串

*/

private function encode( $text )

{

$block_size = $this->blockSize;

$text_length = strlen( $text );

//计算需要填充的位数

$amount_to_pad = $this->blockSize - ( $text_length % $this->blockSize );

if ( $amount_to_pad == 0 ) {

$amount_to_pad = $this->blockSize;

}

//获得补位所用的字符

$pad_chr = chr( $amount_to_pad );

$tmp = "";

for ( $index = 0; $index < $amount_to_pad; $index++ ) {

$tmp .= $pad_chr;

}

return $text . $tmp;

}

/**

* 对解密后的明文进行补位删除

* @param decrypted 解密后的明文

* @return 删除填充补位后的明文

*/

private function decode($text)

{

$pad = ord(substr($text, -1));

if ($pad < 1 || $pad > 32) {

$pad = 0;

}

return substr($text, 0, (strlen($text) - $pad));

}

}

有需要的自己下,ps:对微信登录授权流程有迷惑的可以留言咨询。

【相关推荐】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/525061
推荐阅读
相关标签
  

闽ICP备14008679号