热搜:前端 nest neovim nvim

浅谈nodejs中怎么对字符串进行Base64编码和解码

lxf2023-02-25 18:49:50

Base64编码是什么?Base64是怎么工作的?下面这篇文章将介绍使用Node.js进行字符串 Base64编码和解码的方法,希望对大家有所帮助!

浅谈nodejs中怎么对字符串进行Base64编码和解码

什么是 Base64 编码?

Base64 编码是将数据(通常是二进制)转换为二进制) ASCII 字符集的方法。Base64 它通常被误认为是一种加密技术,因为它可以隐藏数据。值得强调的是, Base64 不是一种加密或压缩技术。事实上,Base64 编码信息的大小是原始数据的实际大小 1.3333 倍。[推荐学习:《nodejs 教程》】

理解:假设我们有 6 个 ASCII 字符,那么二进制数据就是字符, 6 * 8 = 48(位)。如果使用 Base64 如果编码,则将其分为 48 / 6 = 8(组),每组将对应一组 ASCII 字符,也就是说,经过, Base64 编码后,我们会有 8 个 ASCII 字符。因为数据传输会转换成电信号(虽然你看到的是字符),所以数据的大小是按位计算的,8 个 ASCII 字符就是 8 * 8 = 64(位),64 / 48 = 4 / 3 ≈ 1.3333 。 综上所述,Base64 编码信息的大小是原始数据的实际大小 1.3333 倍

Base64 它是使用最广泛的基本编码技术,另外两种常用的编码方案是 Base16 和 Base32。

Base64 你是怎么工作的?

将数据转换为 base64 这是一个多步骤的过程。以下是它对文本字符串的工作方式:

  1. 计算输入文本 8 二进制版本;
  2. 将 8 位置版本的数据重新使用 6 位为一单元分组;
  3. 找到每个 6 十进制版的二进制块;
  4. 通过查询 Base64 获得每个十进制值对应的编码表 Base64 符号。

为了更好地理解这个概念,让我们来看一个例子。假设我们有字符串“”Go win我们想把它转化为“,” Base64 字符串。第一步是将字符串转换为二进制。 “Go win“二进制版本是:

01000111 01101111 00100000 01110111 01101001 01101110

您可以在这里看到每个字符的原因 8 位置表示。然而,正如我们之前所说,Base64 将 8 位二进制是一组数据转换为一组形式 6 数据的位置是一组形式。这是因为 Base64 格式只有 64 个字符:26 大写字母,26 小写字母,10 用于换行的数字字符和“ 和“/”符号

Base64 不要使用一切 ASCII 只使用这些特殊字符。请注意,Base64 一些实现使用和“ 与“/”不同的特殊字符。

回到这个例子,让我们来 8 位数据分成 6 位为一组。

010001 110110 111100 100000 011101 110110 100101 101110

你不会总是把数据分成完整的 6 在这种情况下,您将不得不手动填充位集, 0 。

现在,对于上面的每一块,我们必须找到它的十进制值。以下是这些十进制值:

Binary Decimal 
010001 17 
110110 54 
111100 60 
100000 32 
011101 29 
110110 54 
100101 37 
101110 46

最后,我们必须检查我们刚刚从二进制数据中计算出的每个十进制数 Base64 值。 Base64 编码表如下:

浅谈nodejs中怎么对字符串进行Base64编码和解码

在这里你可以看到十进制 17 对应于“R“,十进制 54 对应于“2”,依此类推。使用此编码表,我们可以看到字符串“字符串”Go win”使用 Base64 编码为“R28gd2lu”。您可以使用任何在线文本转换 Base64 转换器验证此结果。

为什么要用? Base64 编码?

有时以二进制格式发送信息是有风险的,因为并非所有的应用程序或网络系统都能处理原始二进制文件。另一方面,ASCII 字符集广为人知,对于大多数系统来说,处理起来非常简单。

例如,电子邮件服务器需要文本数据,因此通常使用 ASCII。因此,如果您想将图片或任何其他二进制文件发送到电子邮件服务器,您需要首先将其编码为基于文本的格式,最好是 ASCII。这就是 Base64 编码在将二进制数据转换为正确格式方面非常方便。

使用 Node.js 字符串 Base64 编码

在 Node.js 中对 Base64 编码字符串最简单的方法就是通过字符串进行编码 Buffer 对象。在 Node.js 中,Buffer 它是一个全球对象,这意味着你不需要使用 require 可以使用语句导入应用程序 Buffer 对象。

在物理内存中,缓冲区是一个不可改变的整数组,它还可以执行许多不同的编码/解码。这些包括从 UTF-8、UCS2、Base64 和 十六进制编码到另一种格式, 或者从另一种格式编码到另一种格式编码 UTF-8、UCS2、Base64 和 十六进制。当您编写处理和操作数据代码时,您可以在某个时候使用它 Buffer 对象。

看看下面的例子。在这里,我们将使用它。 Buffer 对象将文本字符串编码为对象 Base64。将以下代码保存在“encode-text.js”文件中: