You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中替代Utilities库实现computeHmacSignature方案问询

TypeScript实现HMAC-SHA1签名替代方案

Node.js 环境实现

直接使用Node.js内置的crypto模块即可,无需额外依赖:

import * as crypto from 'crypto';

function computeHmacSignature(signatureBaseString: string, signingKey: string): Buffer {
  return crypto.createHmac('sha1', signingKey)
    .update(signatureBaseString)
    .digest();
}

// 调用示例
const signature = computeHmacSignature(signatureBaseString, this.getSigningKey());

若需和原Utilities返回的字节数组格式完全匹配,可将Buffer转为Uint8Array:

const signatureArray = new Uint8Array(computeHmacSignature(signatureBaseString, this.getSigningKey()));

浏览器环境实现

浏览器中使用Web Crypto API的SubtleCrypto接口(异步操作):

async function computeHmacSignature(signatureBaseString: string, signingKey: string): Promise<Uint8Array> {
  const encoder = new TextEncoder();
  const keyBytes = encoder.encode(signingKey);
  const messageBytes = encoder.encode(signatureBaseString);

  const hmacKey = await window.crypto.subtle.importKey(
    'raw',
    keyBytes,
    { name: 'HMAC', hash: 'SHA-1' },
    false,
    ['sign']
  );

  const signatureBuffer = await window.crypto.subtle.sign('HMAC', hmacKey, messageBytes);
  return new Uint8Array(signatureBuffer);
}

// 调用示例(需在异步函数内执行)
const signature = await computeHmacSignature(signatureBaseString, this.getSigningKey());

可选格式转换

如果原代码需要将签名转为Base64字符串,可添加以下处理:

  • Node.js:signature.toString('base64')
  • 浏览器:btoa(String.fromCharCode(...signature))

内容的提问来源于stack exchange,提问作者Marco Castagnaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:25:59