如何使用JavaScript读取Binary2二进制buffer并完成AES数据解密
正确读取Binary2结构Buffer并完成AES解密的方案
错误原因说明
- 调用
new Uint16Array()报类型错误,是因为你传入的contact.firstname为字符串类型,不符合TypedArray要求的ArrayBufferLike类型入参,你需要先确保拿到的是Binary2结构下的buffer字段本身,而非整个Binary2对象或序列化后的字符串。 parseInt本身是用于处理字符串转整数的API,用来处理二进制Buffer属于用法错误,返回NaN是预期结果。
正确处理步骤
步骤1:提取有效Buffer字段
首先从Binary2结构中取出原始Buffer对象:
// 假设你的Binary2结构存储在binary2Obj变量中 const rawBuffer = binary2Obj.buffer; // 提前做类型校验避免后续报错 if (!(rawBuffer instanceof Buffer)) { throw new Error('未获取到有效Buffer类型数据'); }
步骤2:转换为AES解密要求的输入格式
AES解密通常要求Uint8Array类型的字节数组作为输入,不需要用Uint16Array(除非你明确是按16位字处理的特殊场景),转换方式如下:
// 转换为Uint8Array格式,适配绝大多数解密库的入参要求 const aesInput = new Uint8Array(rawBuffer); // 如果解密库要求传入ArrayBuffer类型,直接调用Buffer的.buffer属性即可 const aesInputBuffer = rawBuffer.buffer;
步骤3:AES解密示例
以Node.js内置crypto模块做128位AES解密为例(你贴出的Buffer长度为16字节,正好对应AES-128的密钥/IV长度):
import * as crypto from 'crypto'; // 假设本次拿到的Buffer是AES解密的密钥 const key = aesInput; const iv = Buffer.from('替换为你实际用到的16字节IV内容'); const encryptedData = Buffer.from('替换为你实际的密文数据'); const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); let decryptedResult = decipher.update(encryptedData); decryptedResult = Buffer.concat([decryptedResult, decipher.final()]); // 按实际的明文编码调整toString的参数,比如utf8、base64等 console.log('解密结果:', decryptedResult.toString('utf8'));
特殊场景兼容
如果你拿到的Binary2对象被序列化成了JSON字符串(比如从后端接口返回时做了序列化),需要先反序列化还原Buffer:
const binary2Obj = JSON.parse(serializedBinary2Str, (key, value) => { if (value?.type === 'Buffer' && Array.isArray(value.data)) { return Buffer.from(value.data); } return value; });
内容的提问来源于stack exchange,提问作者alpha
相关产品推荐
相关产品推荐

