当前位置:首页 > PHP

php 实现签名

2026-01-30 02:12:22PHP

PHP 实现签名的基本方法

在 PHP 中实现签名通常用于数据完整性验证、身份认证或 API 安全。以下是常见的签名实现方式:

php 实现签名

HMAC 签名

使用哈希消息认证码(HMAC)生成签名,适用于 API 请求验证:

php 实现签名

$secretKey = 'your-secret-key';
$data = 'message-to-sign';
$signature = hash_hmac('sha256', $data, $secretKey);

RSA 签名

使用非对称加密算法生成签名:

$privateKey = openssl_pkey_get_private('file://path/to/private.key');
$data = 'message-to-sign';
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);

URL 安全签名

生成可用于 URL 的安全签名:

$data = ['param1' => 'value1', 'param2' => 'value2'];
ksort($data);
$queryString = http_build_query($data);
$signature = md5($queryString . 'your-salt');

签名验证方法

HMAC 验证

$receivedSignature = $_SERVER['HTTP_SIGNATURE'];
$computedSignature = hash_hmac('sha256', $requestBody, $secretKey);
if (hash_equals($computedSignature, $receivedSignature)) {
    // 验证通过
}

RSA 验证

$publicKey = openssl_pkey_get_public('file://path/to/public.pem');
$data = 'original-message';
$signature = base64_decode($receivedSignature);
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);

注意事项

  • 始终使用安全的哈希算法(如 SHA256、SHA512)
  • 对于 HMAC,密钥应足够长且随机
  • 考虑添加时间戳防止重放攻击
  • 在比较签名时使用 hash_equals() 防止时序攻击
  • 敏感信息不应仅依赖签名,应结合其他安全措施

完整示例(API 签名)

function generateApiSignature($params, $secret) {
    ksort($params);
    $query = http_build_query($params);
    return hash_hmac('sha256', $query, $secret);
}

function verifyApiSignature($receivedSig, $params, $secret) {
    $expectedSig = generateApiSignature($params, $secret);
    return hash_equals($expectedSig, $receivedSig);
}

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…