背景
在研究如何引导用户通过H5页面,关注公众号的问题时。发现公众号的 UID
,经过了base64加密。
于是,思考如何在NodeJS中对字符串或数字,进行base64编码。
解决办法
console.log(Buffer.from('Hello').toString('base64')) // SGVsbG8=
console.log(Buffer.from('SGVsbG8=', 'base64').toString('ascii')) // hello
过程:
- 用
string
新建一个Buffer
- 将
Buffer
解码成指定字符编码的string
原理
主要用到了 Buffer.from
的API,文档如下:
Buffer.from(string[, encoding])
buf.toString([encoding[, start[, end]]])
encoding
<string> 解码使用的字符编码。默认:'utf8'
start
<integer> 开始解码的字节偏移量。默认:0
end
<integer> 结束解码的字节偏移量(不包含)。 默认:buf.length
- 返回: <string>
深度探索 - 什么是base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。
换句话说,base64就是选用64个字符——小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)—— 作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。
转换步骤
- 将每三个字节作为一组,一共是24个二进制位。
- 将这24个二进制位分为四组,每个组有6个二进制位。
- 在每组前面加两个00,扩展成32个二进制位,即四个字节。
- 根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
转换实例,可以参考阮老师这篇,对 Man
字符进行base64编码的文章。
需要指出的是,经过base64编码后,3个字节会变成4个字节。因此,编码后的文本要比原文本大出三分之一。
总结
在NodeJS
中,Buffer
是一个全局对象,所以使用时无需单独 require
。在创建 Buffer
时,我们可以通过第二个参数,指明 string
的编码类型(例如,base64
)。
buf.toString
时,也可以指定编码类型。默认为utf8
。主要编码类型有 ascii
、utf8
、ucs2
、base64
、binary
。