如何对AES加密的缓冲区进行Base64编码

7

我将尝试将一个缓冲区编码为base64字符串,但它只是将数组复制并粘贴到字符串中而不进行编码。

我要编码的缓冲区是:

Uint8Array(16)
0: 120
1: 207
2: 91
3: 215
4: 169
5: 206
6: 208
7: 145
8: 250
9: 19
10: 191
11: 254
12: 154
13: 209
14: 47
15: 122

buffer: ArrayBuffer { byteLength: 16 }
byteLength: 16
byteOffset: 0
length: 16

<prototype>: Uint8ArrayPrototype {  }

我尝试使用buffer.toString('base64'),如下所示,但它没有起作用。
我正在使用以下代码:
var buf = Buffer.from([18, 5, 2, 7, 32, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
    var aesCbc = new aesjs.ModeOfOperation.cbc(key);
    var encryptedBytes = aesCbc.encrypt(buf);
    console.log(encryptedBytes)
    var string64 = encryptedBytes.toString('base64');
    console.log(string64)

我希望得到这样的字符串:

eAnguAGneSD+Y/jOpikpnQ== (这只是一个base64字符串的例子)

但结果是:

字符串:120,207,91,215,169,206,208,145,250,19,191,254,154,209,47,122

感谢您的时间!

1个回答

18

您正在尝试对 Uint8Array 值进行 base64 编码,但实际上它并不是一个缓冲区。您需要使用以下代码将其转换为缓冲区:

var encryptedBytes = Buffer.from(aesCbc.encrypt(buf));

encryptedBytes.toString('base64'); // your base64 string

为什么要加密缓冲区? - OneCricketeer
@OneCricketeer,你为什么问这个问题? - micnic
我的意思是,我看到OP加密了数据,但是buf.toString('base64')本身就可以工作。 - OneCricketeer
@OneCricketeer,是的,OP可以使用buf.toString('base64'),但我的观点是要展示他的问题以及在需要字符串化加密缓冲区时的可能解决方案。在帖子问题中,他在文本中提到尝试使用缓冲区方法,但在代码中调用了加密Uint8Array的.toSting()方法,我假设他想要加密缓冲区的base64显示。 - micnic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接