Jump to content
Sign in to follow this  
墨香年少

php web api签名demo

Recommended Posts

设计安全的Web API加密签名方式通常涉及以下几个步骤:

选择加密算法:常见的有HMAC (Hash-based Message Authentication Code)、RSA、SHA-256等。HMAC是一种广泛使用的安全协议,因为它提供了一种验证消息完整性和身份验证的方式。

生成签名:使用服务器和客户端共享的密钥,对请求中的重要信息(如请求方法、URI、时间戳和请求体)进行加密,生成唯一的签名。

验证签名:服务器接收到请求后,使用相同的密钥和算法对请求进行加密,并将结果与请求中的签名进行比较。如果匹配,则认为请求是合法的。

以下是PHP和C++中实现API加密签名的示例。

PHP 示例

假设我们使用HMAC-SHA256算法生成和验证签名。

生成签名:

<?php
// 服务器和客户端共享的密钥
$secretKey = 'your_secret_key';

// 待签名的数据
$data = 'data_to_sign';

// 生成签名
$signature = hash_hmac('sha256', $data, $secretKey);

echo "Signature: " . $signature;
?>

验证签名:

<?php
// 接收到的数据和签名
$receivedData = 'data_to_sign';
$receivedSignature = 'received_signature';

// 服务器端的密钥
$secretKey = 'your_secret_key';

// 使用相同的方法生成签名
$validSignature = hash_hmac('sha256', $receivedData, $secretKey);

// 验证签名
if(hash_equals($validSignature, $receivedSignature)) {
    echo "Valid signature";
} else {
    echo "Invalid signature";
}
?>

C++ 示例

在C++中,你可以使用OpenSSL库来实现HMAC加密。

首先,确保你已经安装了OpenSSL库。

生成签名:

#include <openssl/hmac.h>
#include <iostream>
#include <iomanip>
#include <sstream>

std::string generateSignature(const std::string &data, const std::string &key) {
    unsigned char* digest;
    digest = HMAC(EVP_sha256(), key.c_str(), key.length(),
                  (unsigned char*)data.c_str(), data.length(), NULL, NULL);

    std::stringstream ss;
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        ss << std::hex << std::setw(2) << std::setfill('0') << (int)digest[i];
    }

    return ss.str();
}

int main() {
    std::string key = "your_secret_key";
    std::string data = "data_to_sign";
    std::string signature = generateSignature(data, key);
    std::cout << "Signature: " << signature << std::endl;
}

验证签名与生成签名类似,你需要将接收到的签名与你自己生成的签名进行比较。

请注意,这里的C++示例需要链接OpenSSL库。如果你使用的是g++,可以通过添加-lcrypto选项来链接它,例如:

g++ your_file.cpp -o your_program -lcrypto

这些示例展示了如何在PHP和C++中使用HMAC-SHA256算法来生成和验证API请求的签名。在实际应用中,你可能还需要考虑添加时间戳、随机数等额外信息到签名中,以进一步增强安全性。


目之所及,皆是回忆,心之所想,皆是过往

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

注册必须使用2-8个中文汉字作为账号