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
相关产品推荐
相关产品推荐

