当前位置:首页 > JavaScript

js 签名算法实现

2026-03-15 15:54:31JavaScript

签名算法概述

签名算法用于确保数据的完整性和真实性,常用于API请求验证、数据传输等场景。常见的签名算法包括HMAC、RSA、ECDSA等,JavaScript中可通过原生API或第三方库实现。

HMAC签名实现

HMAC(Hash-based Message Authentication Code)是一种基于哈希的签名算法,常用SHA-256或SHA-1作为哈希函数。

js 签名算法实现

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是一种非对称加密算法,常用于数字签名。需生成公私钥对,私钥用于签名,公钥用于验证。

js 签名算法实现

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。
  • 数据编码:确保签名和验证时使用相同的编码格式(如hexbase64)。

标签: 算法js
分享给朋友:

相关文章

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…