当前位置:首页 > JavaScript

js实现签名

2026-04-06 14:17:27JavaScript

实现数字签名(RSA-SHA256)

使用crypto模块生成密钥对并签名:

const crypto = require('crypto');

// 生成密钥对
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
});

// 签名函数
function signData(data, privateKey) {
  const sign = crypto.createSign('SHA256');
  sign.update(data);
  return sign.sign(privateKey, 'base64');
}

// 验证函数
function verifySignature(data, signature, publicKey) {
  const verify = crypto.createVerify('SHA256');
  verify.update(data);
  return verify.verify(publicKey, signature, 'base64');
}

// 示例
const data = '待签名字符串';
const signature = signData(data, privateKey);
const isValid = verifySignature(data, signature, publicKey);
console.log('签名验证结果:', isValid);

实现HMAC签名(对称加密)

适合API请求签名验证:

const crypto = require('crypto');

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

const secretKey = 'your-secret-key';
const message = '请求参数排序拼接';
const hmacSignature = createHMAC(secretKey, message);

前端实现(Web Crypto API)

浏览器环境下的签名方案:

js实现签名

async function generateKeyPair() {
  return await window.crypto.subtle.generateKey(
    {
      name: 'RSASSA-PKCS1-v1_5',
      modulusLength: 2048,
      publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
      hash: 'SHA-256',
    },
    true,
    ['sign', 'verify']
  );
}

async function signData(privateKey, data) {
  const encoded = new TextEncoder().encode(data);
  return await window.crypto.subtle.sign(
    'RSASSA-PKCS1-v1_5',
    privateKey,
    encoded
  );
}

注意事项

  • RSA签名适合非对称加密场景,HMAC适合共享密钥场景
  • 前端签名需考虑密钥安全存储问题,通常建议由后端完成
  • 实际应用中需添加时间戳、随机数等防重放攻击机制

标签: js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js画图实现

js画图实现

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