当前位置:首页 > JavaScript

js 签名算法实现

2026-04-07 09:18:14JavaScript

js 签名算法实现

js 签名算法实现

签名算法实现(JavaScript)

HMAC-SHA256 签名示例

const crypto = require('crypto');

function generateHMAC(secret, message) {
  return crypto
    .createHmac('sha256', secret)
    .update(message)
    .digest('hex');
}

const signature = generateHMAC('your-secret-key', 'data-to-sign');

RSA 签名示例

const crypto = require('crypto');
const fs = require('fs');

const privateKey = fs.readFileSync('private.pem');

function signWithRSA(data) {
  const sign = crypto.createSign('SHA256');
  sign.update(data);
  return sign.sign(privateKey, 'base64');
}

const signature = signWithRSA('important-data');

ECDSA 签名示例

const crypto = require('crypto');
const { privateKey } = crypto.generateKeyPairSync('ec', {
  namedCurve: 'secp256k1'
});

function signWithECDSA(data) {
  const sign = crypto.createSign('SHA256');
  sign.update(data);
  return sign.sign(privateKey, 'base64');
}

签名验证实现

// HMAC 验证
function verifyHMAC(secret, message, signature) {
  const expectedSig = generateHMAC(secret, message);
  return crypto.timingSafeEqual(
    Buffer.from(expectedSig),
    Buffer.from(signature)
  );
}

// RSA 验证
const publicKey = fs.readFileSync('public.pem');

function verifyRSA(data, signature) {
  const verify = crypto.createVerify('SHA256');
  verify.update(data);
  return verify.verify(publicKey, signature, 'base64');
}

浏览器环境实现

// Web Crypto API 示例
async function signWithWebCrypto() {
  const key = await window.crypto.subtle.generateKey(
    { name: 'HMAC', hash: 'SHA-256' },
    true,
    ['sign', 'verify']
  );

  const data = new TextEncoder().encode('message');
  const signature = await window.crypto.subtle.sign('HMAC', key, data);
  return Array.from(new Uint8Array(signature)).map(b => b.toString(16).padStart(2, '0')).join('');
}

注意事项

  • 密钥管理应使用安全存储方案
  • 生产环境建议使用专业的密钥管理服务
  • 不同算法适用于不同安全需求场景
  • 时间戳和随机数可防止重放攻击
  • 签名结果通常需要Base64或Hex编码

性能优化建议

对于高频签名场景:

  • 可缓存密钥对象避免重复解析
  • 考虑使用更高效的算法如Ed25519
  • 批量处理签名请求

以上实现可根据具体安全需求进行调整,建议结合实际的业务场景和安全规范进行实现。

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

相关文章

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js画图实现

js画图实现

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现吸色

js实现吸色

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

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…