当前位置:首页 > PHP

php 实现签名

2026-01-30 02:12:22PHP

PHP 实现签名的基本方法

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

HMAC 签名

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

$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实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…