当前位置:首页 > JavaScript

js 签名算法实现

2026-04-07 09:18:14JavaScript

签名算法实现(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编码

性能优化建议

对于高频签名场景:

js 签名算法实现

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

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

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…