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

Cloudflare Workers中SHA-256加密文本解密及TextDecoder报错解决咨询

报错原因与修正方案

核心问题说明

  1. API使用错误:TextDecoder.decode() 方法仅接收二进制数组(如Uint8Array)作为输入,作用是把二进制数据转为普通字符串,你传入字符串类型的message自然会触发类型错误。
  2. 概念误区: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:15:05