如何将加密字符串b/dWBWBYDdE2A5Uh转换为指定Uint8Array?
解决方案:Base64解码得到目标Uint8Array
你的问题核心是用错了解码方式:你把字符串当成UTF-8文本编码,但实际上这个字符串是Base64编码后的二进制数据,需要用Base64解码才能得到目标的12字节Uint8Array。
验证依据
目标Uint8Array长度为12(12×8=96位),而你的输入字符串长度是16,16×6=96位,完全符合Base64的编码规则(每个Base64字符对应6位二进制)。
浏览器环境实现代码
const base64Str = "b/dWBWBYDdE2A5Uh"; // Base64解码为二进制字符串 const binaryStr = atob(base64Str); // 转换为Uint8Array const result = new Uint8Array(binaryStr.length); for (let i = 0; i < binaryStr.length; i++) { result[i] = binaryStr.charCodeAt(i); } console.log(result); // 输出:Uint8Array(12) [111, 247, 86, 5, 96, 88, 13, 209, 54, 3, 149, 33, ...]
Node.js环境实现代码
const base64Str = "b/dWBWBYDdE2A5Uh"; const result = Buffer.from(base64Str, 'base64'); console.log(result); // Node.js的Buffer是Uint8Array的子类,输出结果与目标一致
为什么之前的方法不对
new TextEncoder().encode()的作用是将字符串的每个字符按UTF-8编码转为字节,比如字符b对应98、/对应47,这就是你得到16字节数组的原因——但你的输入字符串并非普通UTF-8文本,而是Base64编码后的二进制数据容器,必须用Base64解码才能还原原始字节。
内容的提问来源于stack exchange,提问作者Gracie williams
相关产品推荐
相关产品推荐

