当前位置:首页 > 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实现栈

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

php实现搜索

php实现搜索

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

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…