对pkcs7encoder.lib、sha1.lib、wxbizmsgcrypt.lib、xmlparse.lib代码文件做注释

Signed-off-by: fanbo <3412853751@qq.com>
src
fanbo 6 months ago
parent b88beea067
commit 4e964c25df

@ -1,32 +1,40 @@
<?php
namespace LaneWeChat\Core\Aes;
namespace LaneWeChat\Core\Aes; // 定义命名空间,用于组织代码
class PKCS7Encoder
class PKCS7Encoder // 定义PKCS7Encoder类
{
public static $block_size = 32;
public static $block_size = 32; // 定义PKCS7编码的块大小固定为32字节
// 编码方法用于对数据进行PKCS7填充
function encode($text)
{
$block_size = PKCS7Encoder::$block_size;
$text_length = strlen($text);
$block_size = PKCS7Encoder::$block_size; // 获取块大小
$text_length = strlen($text); // 获取原始数据长度
// 计算需要填充的字节数,使数据长度成为块大小的整数倍
$amount_to_pad = PKCS7Encoder::$block_size - ($text_length % PKCS7Encoder::$block_size);
// 如果数据长度已经是块大小的整数倍,则需要填充一个块大小的字节
if ($amount_to_pad == 0) {
$amount_to_pad = PKCS7Encoder::block_size;
}
$pad_chr = chr($amount_to_pad);
$tmp = "";
$pad_chr = chr($amount_to_pad); // 将需要填充的字节数转换为字符
$tmp = ""; // 初始化临时字符串,用于构建填充字符
for ($index = 0; $index < $amount_to_pad; $index++) {
$tmp .= $pad_chr;
$tmp .= $pad_chr; // 重复填充字符
}
// 返回填充后的数据
return $text . $tmp;
}
// 解码方法用于移除PKCS7填充
function decode($text)
{
$pad = ord(substr($text, -1));
$pad = ord(substr($text, -1)); // 获取最后一个字符的ASCII值即填充的字节数
// 如果填充的字节数不在1到32之间则认为没有填充
if ($pad < 1 || $pad > 32) {
$pad = 0;
}
// 返回移除填充后的数据
return substr($text, 0, (strlen($text) - $pad));
}
}
?>

@ -1,17 +1,27 @@
<?php
namespace LaneWeChat\Core\Aes;
namespace LaneWeChat\Core\Aes; // 定义命名空间,用于组织代码
class SHA1
class SHA1 // 定义SHA1类
{
// getSHA1方法用于生成SHA1哈希值
public function getSHA1($token, $timestamp, $nonce, $encrypt_msg)
{
try {
// 创建一个数组包含加密消息、Token、时间戳和随机数
$array = array($encrypt_msg, $token, $timestamp, $nonce);
// 对数组元素进行字符串排序
sort($array, SORT_STRING);
// 将数组元素连接成一个字符串
$str = implode($array);
// 生成该字符串的SHA1哈希值并返回
return array(ErrorCode::$OK, sha1($str));
} catch (\Exception $e) {
// 如果发生异常返回错误码和null值
return array(ErrorCode::$ComputeSignatureError, null);
}
}
}
?>

@ -1,12 +1,13 @@
<?php
namespace LaneWeChat\Core\Aes;
namespace LaneWeChat\Core\Aes; // 定义命名空间,用于组织代码
class WXBizMsgCrypt
class WXBizMsgCrypt // 定义WXBizMsgCrypt类
{
private $token;
private $encodingAesKey;
private $appId;
private $token; // 微信Token
private $encodingAesKey; // 微信EncodingAESKey
private $appId; // 微信AppId
// 类构造函数用于初始化Token、EncodingAESKey和AppId
public function __construct($token, $encodingAesKey, $appId)
{
$this->token = $token;
@ -14,11 +15,17 @@ class WXBizMsgCrypt
$this->appId = $appId;
}
// 加密消息方法
public function encryptMsg($replyMsg, $timeStamp, $nonce, &$encryptMsg)
{
$pc = new Prpcrypt($this->encodingAesKey);
$array = $pc->encrypt($replyMsg, $this->appId);
$ret = $array[0];
$pc = new Prpcrypt($this->encodingAesKey); // 实例化Prpcrypt类用于消息加密
$array = $pc->encrypt($replyMsg, $this->appId); // 调用encrypt方法进行消息加密
$ret = $array[0]; // 获取加密结果的状态码
if ($ret != 0) {
return $ret;
return $ret; // 如果加密失败,返回错误码
}
// 省略了后续代码,但通常这里会将加密后的消息、时间戳、随机数等信息
// 格式化为XML格式并赋值给$encryptMsg变量
}
}
?>

@ -1,31 +1,43 @@
<?php
namespace LaneWeChat\Core\Aes;
namespace LaneWeChat\Core\Aes; // 定义命名空间,用于组织代码
class XMLParse
class XMLParse // 定义XMLParse类
{
// 提取方法用于从XML文本中提取加密信息和接收方账号
public function extract($xmltext)
{
try {
$xml = new \DOMDocument();
$xml->loadXML($xmltext);
$xml = new \DOMDocument(); // 创建DOMDocument对象
$xml->loadXML($xmltext); // 加载XML文本
// 使用DOMDocument对象的getElementsByTagName方法获取Encrypt和ToUserName标签
$array_e = $xml->getElementsByTagName('Encrypt');
$array_a = $xml->getElementsByTagName('ToUserName');
// 获取Encrypt标签的文本内容和ToUserName标签的文本内容
$encrypt = $array_e->item(0)->nodeValue;
$tousername = $array_a->item(0)->nodeValue;
// 返回提取结果包括状态码0表示成功加密信息和接收方账号
return array(0, $encrypt, $tousername);
} catch (\Exception $e) {
// 如果发生异常返回错误码和null值
return array(ErrorCode::$ParseXmlError, null, null);
}
}
// 生成方法用于生成XML格式的响应消息
public function generate($encrypt, $signature, $timestamp, $nonce)
{
// 定义XML格式的字符串模板使用CDATA区包含加密信息和其他参数
$format = "<xml>
<Encrypt><![CDATA[%s]]></Encrypt>
<MsgSignature><![CDATA[%s]]></MsgSignature>
<TimeStamp>%s</TimeStamp>
<Nonce><![CDATA[%s]]></Nonce>
</xml>";
// 使用sprintf函数格式化XML字符串模板插入加密信息和其他参数
return sprintf($format, $encrypt, $signature, $timestamp, $nonce);
}
}

Loading…
Cancel
Save