当前位置:首页 > JavaScript

js 实现签名

2026-04-05 11:46:11JavaScript

使用 Web Crypto API 实现签名

Web Crypto API 是现代浏览器提供的加密接口,支持多种签名算法(如 RSA-PSS、ECDSA、HMAC)。以下示例使用 HMAC-SHA256 进行签名:

async function generateHMACSignature(message, secretKey) {
  const encoder = new TextEncoder();
  const encodedMessage = encoder.encode(message);
  const encodedKey = encoder.encode(secretKey);

  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    encodedKey,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign']
  );

  const signature = await crypto.subtle.sign('HMAC', cryptoKey, encodedMessage);
  return Array.from(new Uint8Array(signature)).map(b => b.toString(16).padStart(2, '0')).join('');
}

使用 Node.js 的 crypto 模块

Node.js 内置的 crypto 模块提供更完整的签名功能,支持 RSA、ECDSA 等算法:

const crypto = require('crypto');

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

第三方库实现

对于需要更多功能的场景,可以使用 jsrsasign 等第三方库:

const KJUR = require('jsrsasign');

function signWithECDSA(data, privateKey) {
  const sig = new KJUR.crypto.Signature({ alg: 'SHA256withECDSA' });
  sig.init(privateKey);
  sig.updateString(data);
  return sig.sign();
}

前端常见场景实现

前端签名常用于 API 请求验证,以下示例展示如何为请求添加签名:

js 实现签名

async function addRequestSignature(url, params, secret) {
  const sortedParams = Object.keys(params).sort().map(k => `${k}=${params[k]}`).join('&');
  const signStr = `${url}?${sortedParams}${secret}`;
  return await generateHMACSignature(signStr, secret);
}

注意事项

  • 密钥管理:永远不要在前端硬编码或暴露敏感密钥
  • 算法选择:根据安全需求选择适当算法(如 HMAC 适合对称加密,RSA/ECDSA 适合非对称场景)
  • 编码处理:注意不同环境下的编码一致性(如 UTF-8 编码)
  • 浏览器兼容性:Web Crypto API 需要较新浏览器版本

对于生产环境,建议结合 HTTPS、时间戳、随机数等机制增强签名安全性。

标签: js
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…