Как реализованы данные в формате base64?

Node.js

base64

Base64 — один из наиболее распространенных методов кодирования для передачи 8-битного байт-кода в Интернете Base64 — это метод представления двоичных данных, основанный на 64 печатных символах.

Для внешнего интерфейса можно использовать base64 для замены всего, что можно поместить в путь.

Объект буфера в узле может выводить объект буфера как base64 через toString('base64'). Кратко опишем принцип реализации преобразования китайских иероглифов в base64.

Например, давайте рассмотрим, как результатом преобразования человека «Ха» через base64 является «5ZOI».

Во-первых, мы используем метод from объекта Buffer в nodejs, чтобы преобразовать человека в объект буфера. Вы можете получить e5 93 88 три шестнадцатеричных байта. Вы можете видеть, что этот функтор состоит из 3 байтов.

const buf = Buffer.from("哈");
console.log(buf); // // e5 93 88

Затем преобразуйте каждый байт в двоичный, 0x представляет шестнадцатеричное, нам нужно написать 0x перед e5 93 88, метод toString может передать шестнадцатеричное число для преобразования, напишите 2 здесь.

// 将每个字节转为二进制
(0xe5).toString(2); // 11100101
(0x93).toString(2); // 10010011
(0x88).toString(2); // 10001000

Затем соедините полученные три бинарных данных вместе, чтобы получить 111001011001001110001000.

111001011001001110001000

Затем разрежьте 111001011001001110001000 на группы по шесть штук, которые здесь можно разрезать на 4 части.

111001 011001 001110 001000

Затем добавьте 0 бит перед каждой группой, чтобы получить 8 бит.

00111001
00011001
00001110
00001000

Четыре набора полученных данных затем преобразуются в десятичные данные соответственно. Всего здесь можно получить 4 числа, это немного близко к 4 символам, полученным после преобразования слова «ха» в base64?

parseInt('00111001', 2); // 二进制变为10进制 57
parseInt('00011001', 2); // 二进制变为10进制 25
parseInt('00001110', 2); // 二进制变为10进制 14
parseInt('00001000', 2); // 二进制变为10进制 8

Закодированные данные base64 в основном получаются из AZ плюс az плюс 0123456789+/. Мы объединяем эту строку.

// base64编码
let str = 'ABCDEFGHIGKLMNOPQRSTUVWSYZ';
str += str.toLowerCase(); // 小写字符拼接一次
str += '0123456789+/'; // 数字拼接一次

Мы знаем, что строка символов может быть получена путем индексации символа в указанной позиции, как в массиве.Здесь символ в соответствующей позиции получается значением после приведенного выше десятичного преобразования.57 получает 5, 25 получает Z, а 14 получается O, а 8 — I.

Объединение этих четырех символов вместе дает 5ZOI. Это base64, преобразованный ранее.

const base64 = str[57] + str[25] + str[14] + str[8]; // 5ZOI

шаги перевода base64

1. Получить буфер из строки через Buffer.from и преобразовать каждые 16 байтов буфера в буфере в двоичный

2. Объединение всех двоичных файлов вместе, разделение их на группы по 6 и добавление 00 к началу, чтобы получился 8-битный двоичный файл.

3. Преобразуйте новый двоичный код в десятичный.

4. В наборе base64 они вынесены по десятичным индексам и связаны