js 签名算法实现
签名算法概述
签名算法用于确保数据的完整性和真实性,常用于API请求验证、数据传输等场景。常见的签名算法包括HMAC、RSA、ECDSA等,JavaScript中可通过原生API或第三方库实现。
HMAC签名实现
HMAC(Hash-based Message Authentication Code)是一种基于哈希的签名算法,常用SHA-256或SHA-1作为哈希函数。

const crypto = require('crypto');
function generateHMACSignature(message, secretKey) {
return crypto
.createHmac('sha256', secretKey)
.update(message)
.digest('hex');
}
// 示例
const message = 'data_to_sign';
const secretKey = 'your_secret_key';
const signature = generateHMACSignature(message, secretKey);
console.log('HMAC Signature:', signature);
RSA签名实现
RSA是一种非对称加密算法,常用于数字签名。需生成公私钥对,私钥用于签名,公钥用于验证。

const crypto = require('crypto');
const fs = require('fs');
// 生成密钥对(实际应用中需提前生成并保存)
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
function signWithRSA(data, privateKey) {
const sign = crypto.createSign('SHA256');
sign.update(data);
return sign.sign(privateKey, 'hex');
}
// 示例
const data = 'data_to_sign';
const rsaSignature = signWithRSA(data, privateKey);
console.log('RSA Signature:', rsaSignature);
ECDSA签名实现
ECDSA(Elliptic Curve Digital Signature Algorithm)基于椭圆曲线密码学,比RSA更高效。
const crypto = require('crypto');
// 生成ECDSA密钥对
const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {
namedCurve: 'secp256k1',
});
function signWithECDSA(data, privateKey) {
const sign = crypto.createSign('SHA256');
sign.update(data);
return sign.sign(privateKey, 'hex');
}
// 示例
const ecdsaData = 'data_to_sign';
const ecdsaSignature = signWithECDSA(ecdsaData, privateKey);
console.log('ECDSA Signature:', ecdsaSignature);
验证签名示例
以RSA为例,演示如何验证签名:
function verifyRSASignature(data, signature, publicKey) {
const verify = crypto.createVerify('SHA256');
verify.update(data);
return verify.verify(publicKey, signature, 'hex');
}
const isValid = verifyRSASignature(data, rsaSignature, publicKey);
console.log('Signature Valid:', isValid);
注意事项
- 密钥管理:私钥需严格保密,避免硬编码在代码中,推荐使用环境变量或密钥管理服务。
- 算法选择:HMAC适合对称场景,RSA/ECDSA适合非对称场景。ECDSA性能优于RSA。
- 数据编码:确保签名和验证时使用相同的编码格式(如
hex或base64)。






