Автор: Линь Гуаньхун / Призраки под рукой
Самородки:Талант /user/178526…
Гитхаб:GitHub.com/afan913337456…
Облачная колонка Tencent:cloud.Tencent.com/developer/U…
Колонка блокчейна червоточины:woohoo.impulsecommunity.com/article/153…
PS: Для целей этой статьи я один раз кратко представлю метод кодирования базового класса, а затем позволю вам его запомнить.
содержание
- предисловие
- процесс кодирования
- Пользовательская форма
- Суммировать
предисловие
Я считаю, что более чем подавляющее большинство программистов использовали кодирование и декодирование в различных разработках программного обеспечения.Кодирование и декодирование соответствуют, и есть кодирование и декодирование.
Base16, base32 и base64 — все это методы кодирования, и у них есть собственный набор алгоритмов кодирования.
Но некоторые люди часто называют их加密
, такие как шифрование base64. На самом деле это утверждение не совсем верно. потому что默认的
Все виды информации base16, base32 и base64 общедоступны.К общедоступной информации относятся:
- Как работает алгоритм
- кодировочная таблица,
这个是主要
В base16, base32, base64, как только вы овладеете этими двумя типами информации, это эквивалентно взлому. Можно даже вручную записать закодированный результат ручкой и записать декодированный контент на основе закодированного результата.
16, 32 и 64 им编码原理
Все таки разница заключается в следующих 2х вещах:
一个字符所对应表格中的下标的 bit 位是多少个
- соответствующий
编码表格
Как много
Что означают два вышеуказанных пункта?
Сначала мы знаем тип данныхchar
Обычно он занимает 2 байта, конечно есть два общих случая, например 1 байт, но здесь для примера возьмем 2 байта, например:char r = 'a'
, то если это правило будет изменено, поскольку 2 байта могут использоваться для представления символа, почему он не может быть представлен 3 байтами и 5 байтами? Когда наши другие счетчики байтов представляют символ, будут иметь место другие эффекты. Тем не менее, первый пункт выше аналогичен этому. Когда количество битов, представляющих нижний индекс, изменяется, диапазон значений нижнего индекса также изменяется.Например, максимальное количество битов 2 составляет11
= 3, и наибольшее количество 3 бит равно111
= 7 .
Во-вторых, это таблица для справочных таблиц, например9x9乘法表
. Эта форма должна быть запрошена.
процесс кодирования
При соблюдении двух вышеперечисленных условий мы编码的流程
Обобщается в следующих пунктах:
Например, кодируемая строка:ILU
-
Буду
ILU
Каждый символ в строке преобразуется, чтобы соответствоватьAscii
Значения кодовой таблицы, I = 73, L = 76, U = 85. -
на первом этапе
Ascii
Значения преобразуются в соответствующие二进制
формат, требования должны быть сформированы8 个 bit
, если меньше 8 бит, старшие биты заполняются 0. Например: двоичный код 1 равен 1, чего явно недостаточно для 8 бит, и в конечном итоге он должен отображаться как:0000 0001
.ILU
Результат преобразования следующий:73 = 01001001
76 = 01001100
85 = 01010101
-
согласно с
base X
(где X означает 16, 32, 64 и т. д.), как указано в алгоритме кодированияy 个 bit 位为一个字符在表格中的下标
Правила шага 2 разделены. Напримерbase 16
Правила требуют, чтобы 4 бита использовались в качестве нижнего индекса для соответствия символу, то есть каждые 4 бита являются частью, поэтому деление выглядит следующим образом:Часть 1: 0100 это (73 = 01001001, первые 4 цифры)
Часть 2: 1001 это (73 = 01001001, последние 4 цифры)
Часть 3: 01:00
Часть 4: 1100
Часть 5: 0101
Часть 6: 0101
-
разделить на третьем шаге
每个部分
провести10进制转换
, что соответствует десятичному числу下标值
,следующим образом:0100 = 4, 1001 = 9, 4, 12, 5, 5
-
Последним шагом является объединение результатов, полученных на шаге 4.
下标数
идти查表
, получить соответствующий символ,连在一起,就是编码结果
Строка таблицы кодирования по умолчанию для base16:
数字0~9
а также字母A~F
,общий16
, поместите индекс и таблицу значений каждого из них следующим образом:base16
кодовая таблицаиндекс закодированное значение индекс закодированное значение 0 0 8 8 1 1 9 9 2 2 10 A 3 3 11 B 4 4 12 C 5 5 13 D 6 6 14 E 7 7 15 F наконец
ILU
изbase16
Закодированный результат:494C55
пользовательская форма
код, мы можем указать свой собственный编码表
, например, следующая строка:
var encoding = base32.NewEncoding("ybndrfg8ejkmcpqxot1uwisza345h769")
ybndrfg8ejkmcpqxot1uwisza345h769
32 символа, что соответствует кодировке base 32,下标 0
Соответствующий персонажy
когда вышеILU
Когда пример закодирован с этой таблицей, это уже не так:494C55
Суммировать
На шаге 3 выше не будет вхождений для тех, которые просто делятся на целые числа (8 / 4 = 2 делятся)在最终结果后面补充等于号"="符号
, но не делится, будет дополнен знаком "=". Ниже приведены общие символы 16, 32 и 64, для которых требуется количество бит и таблица кодирования.
имя | Количество цифр в нижнем индексе | строка кодовой таблицы | Если количество людей недостаточно, он будет завершен = |
---|---|---|---|
base 16 | 4 | Цифры 0~9 и буквы A~F | Нет, количество цифр точно кратно 4 |
base 32 | 5 | Заглавные буквы A~Z и цифры 2~7 | Могу |
base 64 | 6 | Прописные буквы A~Z, строчные буквы a~z, цифры 0~9 и "+", "/" | Могу |
имя | После кодирования количество данных меняется |
---|---|
base 16 | При переходе от 8-битного представления символа к 4-битному представлению символа объем данных удваивается. |
base 32 | 8/5 раз |
base 64 | становится 8/6=4/3 раза |
Ограничение завершения, в качестве примера возьмем base32, потому что каждые 5 бит представляют значение индекса символа, а исходные данные составляют 8 бит, а это значит, что на деление будет остаток, например:8 - 5 = 3
, очевидно, осталось 3 бита, поэтому, по крайней мере, сколько битов необходимо для выполнения оставшихся шагов? Это задача наименьшего общего кратного, то есть: 5*8 = 40 бит. Мы можем проверить, что когда есть два символа, это 16 бит, 16/5 = 1 и так далее.
Наконец, делается вывод, что при кодировании base32 кодируемые данные должны быть не менее >= 40 бит, и окончательный результат кодирования может не появиться.=
Нет. Например, кодируемые символы3
, и, очевидно, это приводит к:D=======
,Назад=
Все дополняют друг друга.
Точно так же base64 — это как минимум 24 бита, а 24 — это наименьшее общее кратное 6 и 8.
Выше, это все, запомните основные моменты этого типа кодирования:
- Сколько битов BIT нижнего индекса в таблице символов
- Что такое соответствующая таблица кодирования?
Остальное — следовать схеме, делить, сопоставлять таблицу и получать результат.
коммерческое время
Моя книга о чистых технологиях блокчейна, опубликованная издательством Университета Цинхуа:
《区块链以太坊DApp开发实战》
Сейчас в печати и доступен в Интернете.
Подходит для чтения младшим и средним блокчейн-инженерам.