Cloudflare Workers中SHA-256加密文本解密及TextDecoder报错解决咨询
报错原因与修正方案
核心问题说明
- API使用错误:
TextDecoder.decode()方法仅接收二进制数组(如Uint8Array)作为输入,作用是把二进制数据转为普通字符串,你传入字符串类型的message自然会触发类型错误。 - 概念误区:SHA-256是单向哈希算法,不存在解密操作,无法从哈希值反向还原原始明文。如果你的需求是验证明文对应的哈希是否匹配目标值,只需计算明文的哈希后做比对即可。
代码修改
场景1:计算明文字符串的SHA-256哈希值
如果你传入的message是原始明文,要计算它的SHA-256哈希,修改代码如下:
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) async function handleRequest(request) { const message = "81706cd5bd5049fc200560d3c9efada6418358e09bc135d3de4fa91817fb4768"; // 替换为TextEncoder将字符串转为Uint8Array二进制格式 const msgUint8 = new TextEncoder().encode(message) const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8) const hashArray = Array.from(new Uint8Array(hashBuffer)) const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('') return new Response(hashHex, {status: 200}) }
场景2:将十六进制哈希值转为二进制/普通字符串
如果你传入的message是已经生成的十六进制SHA-256哈希,需要转成二进制或者普通字符串,修改代码如下:
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) async function handleRequest(request) { const message = "81706cd5bd5049fc200560d3c9efada6418358e09bc135d3de4fa91817fb4768"; // 先把十六进制字符串转成Uint8Array const msgUint8 = new Uint8Array(message.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); // 再用TextDecoder解码为普通字符串 const decodedStr = new TextDecoder().decode(msgUint8) return new Response(decodedStr, {status: 200}) }
内容的提问来源于stack exchange,提问作者Bhaskar Chandra
相关产品推荐
相关产品推荐

