首页 > 解决方案 > 浏览器中的缓冲区库不返回与 nodejs 中相同的值

问题描述

当在公钥上的节点 js 中运行 Buffer.from 静态方法时,从浏览器运行它时(在 Angular 项目中),我会得到不同的 console.log。他们不应该是一样的吗?有什么我做错了吗?

const pubKey='30819F300D06092A864886F70D010101050003818D0030818902818100B2E9AFAFEED76A5C31D069F84328D785DFE6C40A69F51B29C7D7C91EF171A5EF6AD9FC30AF31F4B59C0FE317E47B5DBAA04E3753AC7F8B0E54D8EB4372894900DE247FD11B8C2208FE1C837ADEC409B0F2EE89A5C54B8AB80D5934FC65100406077D129DC5EB961E883B937C4251FDA4BD77224D1CDEF09151894F902758AA3B0203010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';

const buff = Buffer.from(pubKey, 'hex');

console.log(buff)
<Buffer 30 81 9f 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 81 8d 00 30 81 89 02 81 81 00 b2 e9 af af ee d7 6a 5c 31 d0 69 f8 43 28 d7 85 df e6 c4 0a 69 ... 244 more bytes>

在角度我已经安装npm i buffer并提供它pollyfills.ts这样的

(window as any).global = window;
(window as any).global.Buffer = require('buffer').Buffer;
(window as any).process = {};

在浏览器Stackblitz上运行相同的代码会产生

在此处输入图像描述

所以我的问题是

为什么浏览器中的 Buffer 返回的东西不一样?[0] = 48 vs [0]= 30

在 Stackblitz 示例中,您可以看到我使用带有 node-rsa 的缓冲区进行加密。nodejs 脚本中的加密值有效,而浏览器中的加密值无效。

标签: node.jsbrowserbufferpublic-key-encryptionnode-rsa

解决方案


数据是一样的,只是两种不同的表示:

console.log(buff)
<Buffer 30 81 9f 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 81 8d 00 30 81 89 02 81 81 00 b2 e9 af af ee d7 6a 5c 31 d0 69 f8 43 28 d7 85 df e6 c4 0a 69 ... >
undefined
console.log(buff.toJSON())
{ type: 'Buffer',
  data:
   [ 48,
     129,

推荐阅读