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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:27:02