php实现签名

PHP 签名实现方法
签名通常用于验证数据的完整性和来源,常见于API请求、支付接口等场景。以下是几种常见的PHP签名实现方式:

HMAC-SHA256 签名
$data = ['param1' => 'value1', 'param2' => 'value2'];
$secretKey = 'your_secret_key';
// 按参数名排序
ksort($data);
$queryString = http_build_query($data);
// 生成签名
$signature = hash_hmac('sha256', $queryString, $secretKey);
RSA 签名
$privateKey = openssl_pkey_get_private('file://path/to/private.key');
$data = 'message to be signed';
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
MD5 签名(不推荐用于安全场景)
$data = ['param1' => 'value1', 'param2' => 'value2'];
$secretKey = 'your_secret_key';
// 拼接参数和密钥
$signString = implode('', $data) . $secretKey;
$signature = md5($signString);
签名验证
对于接收方验证签名:
// HMAC验证示例
$receivedSignature = $_SERVER['HTTP_SIGNATURE'];
$computedSignature = hash_hmac('sha256', $queryString, $secretKey);
if (hash_equals($computedSignature, $receivedSignature)) {
// 验证通过
} else {
// 验证失败
}
注意事项
- 签名参数应排除签名字段本身
- 推荐使用HMAC-SHA256或RSA等安全算法
- 敏感数据不应出现在签名字符串中
- 签名请求应设置有效期
- 生产环境应使用安全的密钥存储方式
对于API签名,通常还需要加入时间戳和nonce等防重放参数。






