成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Base64 編碼原來(lái)這么簡(jiǎn)單,你知道嗎?

開(kāi)發(fā) 前端
Base58Check 編碼,顧名思義是可以對(duì) Base58 編碼進(jìn)行檢查。比如我在傳輸 qH912cvztx編碼時(shí),如果網(wǎng)絡(luò)異常等各種原因,導(dǎo)致數(shù)據(jù)錯(cuò)亂或丟失,接收方要能夠識(shí)別出來(lái)數(shù)據(jù)有問(wèn)題。

做了六七年程序員,經(jīng)常用到 Base64 編碼,但對(duì)于為什么要用,以及它的原理,一直是不求甚解。最近在某本書上看到了 Base64 的編碼原理,原來(lái)這么這么這么簡(jiǎn)單。

Base64 解決了什么問(wèn)題

假如我們要在網(wǎng)絡(luò)中傳輸下面的問(wèn)題:

你好  小朋友

我是磚家

你是誰(shuí)?

這段文本中包含了空格、換行、回車等不可見(jiàn)字符,在網(wǎng)絡(luò)傳輸中,各個(gè)設(shè)備對(duì)不可見(jiàn)字符處理機(jī)制可能不同,會(huì)存在信息傳輸錯(cuò)誤的情況。此時(shí)我們就需要一種編碼機(jī)制,把不可見(jiàn)字符統(tǒng)統(tǒng)轉(zhuǎn)成可見(jiàn)字符。

Base64 編碼原理

接下來(lái)我們通過(guò)將 abcd二字轉(zhuǎn)為 Base64 編碼,來(lái)了解下它的原理。

  • 把字符三三分組,不夠時(shí)通過(guò) 0 補(bǔ)齊。比如abc?三個(gè)字符歸一組,d? 不夠三位,通過(guò)0? 補(bǔ)齊為d00。

圖片

  • 把字符轉(zhuǎn)換成二進(jìn)制 ASCII 編碼。

圖片

  • 把轉(zhuǎn)換后的二進(jìn)制,每六位分隔開(kāi)。

圖片

Q:為什么第一步需要分三個(gè)字符一組?


A:因?yàn)?ASCII 碼每個(gè)字符是 8 位二進(jìn)制,3 * 8 = 24。正好可以被第三步拆分為 4 個(gè) 6 位二進(jìn)制,4 * 6 = 24。

  • 6 位二進(jìn)制能代表0-63,我們有一個(gè)彩虹表,可以將 0-63 分別對(duì)應(yīng)一個(gè)字符,彩虹表如下:

圖片

通過(guò)彩虹表,我們可以將每 6 位分割后的二進(jìn)制做一次轉(zhuǎn)換。

圖片

需要注意的是,凡是補(bǔ)位產(chǎn)生的 0,需要用 = 來(lái)表示。所以最后的兩位都是 =。

最后 abcd 轉(zhuǎn)換為 Base64 編碼后為 YWJjZA==,整體原理還是比較簡(jiǎn)單的,不涉及到高深的算法。

Base64 周邊

  • 由于Base64? 轉(zhuǎn)碼后會(huì)包含+/=?字符,在 URL 不能正常傳輸。所以有一種 URL 友好型的 Base64 編碼,它存在使用_-?來(lái)代替+/?,并且不在末尾追加=。
  • Base32、Base16 的原理和 Base64 基本一致。
  • Base64 并不適合加密,因?yàn)榻饷芴?jiǎn)單了。
  • 漢字通過(guò)gb2312、utf-8、gbk?編碼后,即可轉(zhuǎn)成二進(jìn)制處理。這里借用網(wǎng)上的一個(gè)圖片說(shuō)明:

圖片

Base58 與 Base58Check

Base58 是比特幣在生成錢包地址時(shí)使用的一種編碼形式。它和 Base64 的主要區(qū)別是去掉了肉眼容易看錯(cuò)的字符 0(零)、O(大寫字母 O)、I(大寫字母 i)、l(小寫字母 L)和幾個(gè)影響雙擊選擇的字符:/ 和 + 這種編碼的目的比較簡(jiǎn)單,就是防止在轉(zhuǎn)賬時(shí),看錯(cuò)賬號(hào),轉(zhuǎn)錯(cuò)賬。Base58 的原理更簡(jiǎn)單一些,只涉及到進(jìn)制的轉(zhuǎn)換,大致步驟如下:

  • 將字符轉(zhuǎn)成 ASCII 碼
  • 將 ASCII 碼轉(zhuǎn)換成 58 進(jìn)制
  • 通過(guò)彩虹表映射即可

比如 abcd轉(zhuǎn)換:

  • 轉(zhuǎn)成 ASCII 碼 97-98-99-100
  • 轉(zhuǎn)換成 58 進(jìn)制 3-28-21-49-5-22
  • 通過(guò)如下彩虹表映射為 3VNr6P

圖片

Base58Check 編碼,顧名思義是可以對(duì) Base58 編碼進(jìn)行檢查。比如我在傳輸 qH912cvztx編碼時(shí),如果網(wǎng)絡(luò)異常等各種原因,導(dǎo)致數(shù)據(jù)錯(cuò)亂或丟失,接收方要能夠識(shí)別出來(lái)數(shù)據(jù)有問(wèn)題。Base58Check 編碼基本原理如下:

  • 在 data 前面添加一個(gè)版本標(biāo)識(shí) prefix,用來(lái)識(shí)別編碼的數(shù)據(jù)類型,比如比特幣地址的前綴是 0(十六進(jìn)制是 0x00)。
  • 通過(guò) hash 算法計(jì)算prefix + data?的 hash 值:SHA256(prefix + data)。
  • 將生成的 hash 值截?cái)酁榍八奈唬唇拥胶竺鎝refix + data + 4 位 hash。
  • 將上一步生成的結(jié)果進(jìn)行 Base58 編碼計(jì)算,得到最終結(jié)果。
責(zé)任編輯:武曉燕 來(lái)源: 前端技術(shù)磚家
相關(guān)推薦

2025-01-28 00:00:00

OpenFeign接口依賴

2019-12-30 09:51:35

Word設(shè)計(jì)模式軟件

2023-11-02 10:22:29

gRPC后端通信

2025-02-11 00:00:10

Base64編碼二進(jìn)制

2014-02-20 10:28:28

JavaScriptBase64

2024-02-28 23:07:42

GolangBase64編碼

2024-07-11 08:42:57

2020-12-24 18:44:34

RSA加密算法

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2021-03-05 09:10:19

base64編碼

2024-07-31 10:22:49

Go語(yǔ)言編碼

2021-01-04 14:16:01

小程序地圖騰訊

2023-11-07 08:35:26

2021-09-07 08:59:09

編碼Base64解碼

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2023-12-20 08:23:53

NIO組件非阻塞

2023-12-12 08:41:01

2023-04-26 10:21:04

2024-04-30 09:02:48

2020-06-18 09:04:59

CC++程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区欧美 | 欧美一级淫片免费视频黄 | 日日操操 | 亚洲一区二区三区 | 亚洲国产成人av好男人在线观看 | 91精品国产91久久久久久吃药 | 国产精品黄色 | 国产精品黄视频 | 中文字幕国产一区 | 精品视频一区二区三区 | 日韩一区二区三区视频 | av中文在线观看 | 无吗视频 | 夜夜爽99久久国产综合精品女不卡 | 黄免费在线 | 91免费福利在线 | 中文精品视频 | 91传媒在线播放 | 曰韩一二三区 | 成人免费在线 | 欧美一区二区在线观看视频 | 午夜婷婷激情 | 视频一二三区 | 精品国产99 | 日韩精品中文字幕一区二区三区 | 97在线播放| 亚洲+变态+欧美+另类+精品 | 最新免费黄色网址 | 欧美一区二区三区四区五区无卡码 | 亚洲传媒在线 | 红桃视频一区二区三区免费 | 四虎在线视频 | 综合第一页 | 中文字幕精品一区二区三区精品 | 中文字幕在线播放不卡 | 一级做a | 欧美日韩淫片 | 欧美综合一区二区三区 | 国产精品一码二码三码在线 | 成人精品国产免费网站 | 色嗨嗨|