Web Crypto API 是 JavaScript 中的一个内置库,用于执行加密操作。SHA-256 是一种安全哈希算法,用于生成数据的固定长度摘要。HMAC(Hash-based Message Authentication Code)是一种使用密钥和哈希函数生成消息认证码的方法。
HMAC 不匹配通常是由于以下原因之一:
以下是一个使用 Web Crypto API 生成和验证 HMAC 的示例:
async function generateHMAC(key, data) {
const encoder = new TextEncoder();
const keyBuffer = encoder.encode(key);
const dataBuffer = encoder.encode(data);
const cryptoKey = await window.crypto.subtle.importKey(
'raw',
keyBuffer,
{ name: 'HMAC', hash: { name: 'SHA-256' } },
false,
['sign']
);
const signature = await window.crypto.subtle.sign('HMAC', cryptoKey, dataBuffer);
return signature;
}
async function verifyHMAC(key, data, signature) {
const encoder = new TextEncoder();
const keyBuffer = encoder.encode(key);
const dataBuffer = encoder.encode(data);
const cryptoKey = await window.crypto.subtle.importKey(
'raw',
keyBuffer,
{ name: 'HMAC', hash: { name: 'SHA-256' } },
false,
['verify']
);
const isValid = await window.crypto.subtle.verify('HMAC', cryptoKey, signature, dataBuffer);
return isValid;
}
// 示例用法
(async () => {
const key = 'my-secret-key';
const data = 'Hello, World!';
const signature = await generateHMAC(key, data);
console.log('Generated HMAC:', signature);
const isValid = await verifyHMAC(key, data, signature);
console.log('HMAC Verification:', isValid);
})();
通过以上步骤和示例代码,您应该能够诊断并解决 WebCrypto JS SHA256 HMAC 不匹配的问题。
领取专属 10元无门槛券
手把手带您无忧上云