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

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…