PHP实现签名类
PHP实现通用签名生成与验证类详解
在开发中,为了确保数据传输的安全性,通常会使用签名机制。本文将介绍一个基于PHP的通用签名生成与验证类,并详细解释其工作原理和应用场景。
签名机制的作用
签名机制主要用于以下几个方面:
- 数据完整性校验:确保请求中的参数未被篡改。
- 身份认证:确认请求来源的合法性,防止伪造请求。
- 防重放攻击:通过时间戳或随机字符串等机制,防止同一请求被多次使用。
示例代码功能概述
该类 Sign
提供了两个主要方法:
createSign()
:根据给定参数和密钥生成签名。verifyNotifyForSign()
:验证传入的签名是否合法。
此外,还包含多个私有辅助方法,用于排序、过滤、拼接字符串及执行MD5加密。
一、类结构说明
1. createSign(array $para, string $secret, bool $stripSlashes = true): string
功能:根据传入的参数数组和密钥生成签名。
流程:
- 对参数进行排序(按键名升序)。
- 过滤掉无效参数(如空值、
sign
字段、Key
字段)。 - 拼接成“参数=参数值”的形式,并附加密钥。
- 去除转义字符(可选)。
- 使用 MD5 加密并返回大写结果。
2. verifyNotifyForSign(array $params, string $sign, string $secret, bool $stripSlashes = true): bool
功能:验证传入的签名是否有效。
逻辑:重新生成签名并与传入签名比较,一致则为合法请求。
二、私有方法解析
1. __argSort(array $para): array
对参数数组按键名进行升序排序,保证拼接顺序一致,避免因顺序不同导致签名不一致。
private function __argSort(array $para): array
{ksort($para);reset($para);return $para;
}
2. __paraFilter(array $para): array
过滤掉无效或敏感参数,例如:
sign
:签名本身。Key
:密钥。- 空值、null、‘null’ 字符串。
private