Web Crypto API正式版无sha-224,如何生成该哈希值?
如何通过Web Crypto API生成SHA-224哈希值
正式版Web Crypto API确实未将SHA-224纳入标准支持,但可以通过两种可靠方式实现需求:
1. 基于SHA-256手动推导SHA-224
SHA-224本质是SHA-256的变种,仅初始哈希值不同,且最终结果需截断为前28字节(224位)。你可以通过以下步骤实现:
- 复用SHA-256的算法逻辑,但替换为SHA-224专属的初始哈希值
- 计算完成后截取结果的前28字节作为最终哈希
以下是可运行的JavaScript实现示例(基于公开的SHA-256实现修改初始值):
async function generateSHA224(input) { // SHA-224专属初始哈希值(与SHA-256不同) const initH = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; // 消息编码与SHA-256核心逻辑(替换初始值) const encoder = new TextEncoder(); const data = encoder.encode(input); const hash = await customSHA256(data, initH); // 截取前28字节(224位)并转为十六进制字符串 return Array.from(new Uint8Array(hash.slice(0, 28))) .map(b => b.toString(16).padStart(2, '0')) .join(''); } // 自定义SHA-256实现,支持传入初始哈希值 async function customSHA256(data, initialH) { // 实现SHA-256的消息填充、压缩轮次等核心逻辑 // 此处省略完整SHA-256算法代码,可参考公开的JavaScript SHA-256实现,将默认初始值替换为传入的initialH // 示例框架: const paddedData = padSHA256(data); const blocks = splitIntoBlocks(paddedData); let h = [...initialH]; for (const block of blocks) { h = compressBlock(block, h); } // 将32位整数数组转为Uint8Array return new Uint8Array(h.flatMap(num => [ (num >> 24) & 0xff, (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff ])); } // 辅助函数:SHA-256消息填充逻辑 function padSHA256(data) { const bitLength = data.length * 8; const padding = new Uint8Array(64 - (data.length % 64)); padding[0] = 0x80; const lengthArray = new Uint8Array(8); for (let i = 0; i < 8; i++) { lengthArray[7 - i] = (bitLength >> (i * 8)) & 0xff; } return new Uint8Array([...data, ...padding, ...lengthArray]); } // 辅助函数:分块与压缩逻辑(需补充完整SHA-256压缩轮次实现) function splitIntoBlocks(data) { /* ... */ } function compressBlock(block, h) { /* ... */ }
2. 使用第三方加密库简化实现
如果不想手动编写算法逻辑,可以依赖成熟的第三方加密库(如CryptoJS),这类库通常内置了SHA-224支持,示例代码:
// 需提前引入CryptoJS库 function getSHA224Hash(input) { return CryptoJS.SHA224(input).toString(CryptoJS.enc.Hex); }
注意:部分浏览器可能通过非标准扩展支持直接将"SHA-224"传入subtle.digest,但这不属于规范内容,兼容性无法保证,不建议在生产环境依赖。
内容的提问来源于stack exchange,提问作者David Dal Busco
相关产品推荐
相关产品推荐

