「幣圈小白進階計劃」“區(qū)塊鏈的骨骼”之編碼算法

文/韓大楠

原文首發(fā)幣乎

圖片發(fā)自簡書App


大家好侣签,我是大楠呀痢法!

這是「幣圈小白進階計劃」的第十六篇氏义,希望大家多多給出建議。

謝謝大家饺饭!


寫在前面

最近大楠再看各種算法,共識寫完了职车,也寫完了加密算法瘫俊,但是還有編碼/解碼算法......

你可知道密碼學(xué)么?在此之前提鸟,我只知道柵欄加密法和凱撒密碼這兩種军援。密碼學(xué)它是一種隱藏信息的科學(xué)和藝術(shù),它們是保密的称勋,也可以說是一種秘密消息傳遞的科學(xué)胸哥。

在計算機語言中,要對信息進行加密赡鲜。而區(qū)塊鏈的世界中也是樣的空厌,要對信息進行加密,保證數(shù)據(jù)安全银酬,使之不被篡改嘲更。

而這篇文章寫的只是區(qū)塊鏈骨骼中的一部分——編碼/解碼算法。編碼算法包括Base64揩瞪、Base6458赋朦、Base58Check。

文章會寫的比較硬李破,你可能真心看不懂宠哄,但大楠也是在探索中,有些的東西也搞得不是很明白嗤攻,所以毛嫉,這可以作為小白進階資料。


編碼/解碼算法

計算機使用二進制進行編碼妇菱,而不是我們熟悉的十進制承粤,最重要的原因是二進制物理上更容易實現(xiàn)。二進制是計算技術(shù)中廣泛采用的一種數(shù)制闯团。二進制數(shù)據(jù)是用0和1兩個數(shù)碼來表示的數(shù)辛臊。

比如說,數(shù)字2323偷俭,轉(zhuǎn)化為二進制就是100100010011浪讳。但是,二進制考驗人的記憶力涌萤,人們很難記住16進制的信息淹遵,如果是16進制編碼的文本字符串就相對好記好讀一些了口猜。

那這里就有一張ASCII碼表(其中的一部分)。

(圖片來自網(wǎng)絡(luò))

我們來看上圖透揣,07是一個Bell(響鈴)济炎,如果用計算機程序去打印,結(jié)果是辐真,只能聽到一聲鈴聲须尚。而比特幣的地址是16進制的數(shù),不做轉(zhuǎn)換侍咱,人們根本不知道那是什么耐床。

假如,你的賬戶有77塊錢楔脯,根據(jù)10進制的編碼就是大寫字符M撩轰。如果把數(shù)字77轉(zhuǎn)換成文本“77”(16進制編碼是3737)后再打印,那么顯示在屏幕上的文本就是77昧廷。

咱們來看這個表:


Base64

Base64編碼主要用在傳輸堪嫂、存儲、表示二進制等領(lǐng)域木柬,還可以用來加密皆串,但是這種加密比較簡單。

用64個字符來表示任意二進制數(shù)據(jù)的方法眉枕,通常exe恶复、jpg、pdf等文件都是二進制文件速挑,

Base64寂玲,就是通過64個字符來編碼的,具體請見下表:


Base64的編碼過程:

Base64可以將ASCII字符串或者是二進制編碼成只包含A—Z梗摇,a—z,0—9想许,+伶授,/ 這64個字符( 26個大寫字母,26個小寫字母流纹,10個數(shù)字糜烹,1個+,一個 / 剛好64個字符)漱凝。

這64個字符用6個bit位就可以全部表示出來疮蹦,一個字節(jié)有8個bit 位,那么還剩下兩個bit位茸炒,這兩個bit位用0來補充愕乎。

一個Base64字符仍然是8個bit位阵苇,但是有效部分只有右邊的6個 bit,左邊兩個永遠是0感论。

Base64的編碼規(guī)則是將3個8位字節(jié)(3×8=24位)編碼成4個6位的字節(jié)(4×6=24位)绅项,之后在每個6位字節(jié)前面,補充兩個0比肄,形成4個8位字節(jié)的形式快耿,那么取值范圍就變成了0~63。

2的6次方等于64芳绩,所以每6個位組成一個單元掀亥。


Base58

Base58是基于58個字母和數(shù)字組成的,Base58實際上就是Base64的一個子集妥色,相對于Base64來說搪花,Base58不包括以下Base64的字符:

數(shù)字0

大寫字母O

大寫字母I

小寫字母l

+與/

小寫o和大寫O很容易和數(shù)字0混淆,小寫l和大寫I很容易和數(shù)字1混淆垛膝,Base58就是Base64去除了幾個看起來容易混淆的字符以及容易導(dǎo)致轉(zhuǎn)義的/和+鳍侣。

Base58的編碼表如下:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

必須注意,不同的應(yīng)用實現(xiàn)使用的編碼表內(nèi)容是一樣的吼拥,但是順序可能不一樣倚聚,比如:

1)比特幣地址:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

2)Ripple 地址:rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

Ripple (一個開源、分布式的支付協(xié)議)


Base58Check

Base58Check可以說是Base58的一種編碼形式凿可,在比特幣系統(tǒng)中生成錢包地址的時候就使用到了這種編碼形式惑折,Base58Check就是Base58加上校驗碼。

在二進制數(shù)據(jù)的傳輸過程中枯跑,為了防止數(shù)據(jù)傳輸?shù)腻e誤惨驶,保護數(shù)據(jù)安全,通常會加一個校驗碼敛助。

Base58Check的編碼方式是這樣的:進行編碼前粗卜,在待編碼的內(nèi)容字符串中加入一個字節(jié)的版本信息,版本信息可以自行約定纳击。

比如比特幣地址采用了0×00作為版本信息续扔,然后再計入編碼內(nèi)容字符串的哈希值,通常只要取得哈希值中的4個字節(jié)就可以了焕数,加到一起后纱昧,然后再整體進行Base58編碼。

比特幣地址的生成過程中堡赔,是將版本字節(jié)放在了頭部识脆,而將4個字節(jié)的哈希值放在了尾部,然后進行編碼生成。

經(jīng)過整理編碼后的數(shù)據(jù)在傳輸過程中如果有發(fā)生損壞或者篡改灼捂,接收方在得到數(shù)據(jù)后离例,會對原始數(shù)據(jù)進行同樣的校驗碼計算,并且和接收到的結(jié)果中的校驗碼進行比較纵东。

由于哈希算法的特點粘招,只要原始數(shù)據(jù)有任何更改,計算出的哈希值都會發(fā)生變更偎球,因此只要校驗碼不一致就說明數(shù)據(jù)不是合法的洒扎。


參考資料

1、https://ke.qq.com/course/322857?taid=2781154533240105

https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin

https://baike.baidu.com/item/base64/8545775?fr=aladdin

https://en.bitcoin.it/wiki/Base58Check_encoding

https://mistydew.github.io/blog/2018/05/base58-encoding.html

2衰絮、參考書籍《白話區(qū)塊鏈》袍冷、《區(qū)塊鏈:定義未來金融和經(jīng)濟新格局》


寫在后面

以上就是大楠的小白科普第十六篇——“區(qū)塊鏈的骨骼”之編碼算法,你要是發(fā)現(xiàn)了什么不對的地方猫牡,要和大楠說啊胡诗,就在評論區(qū),留言給我啦淌友。

感謝大家盎突帧!


大楠是誰震庭?

一個很偶然撞進幣乎的幣圈小白瑰抵,是個正在不斷成長的大楠。

那你喜歡她么器联?

當(dāng)然喜歡啦二汛,大楠歡迎來撩哦。

微信:15222567477拨拓,加大楠也要備注的呢肴颊,就叫簡書~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渣磷,隨后出現(xiàn)的幾起案子婿着,更是在濱河造成了極大的恐慌,老刑警劉巖醋界,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟身,死亡現(xiàn)場離奇詭異,居然都是意外死亡物独,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門氯葬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挡篓,“玉大人,你說我怎么就攤上這事」傺校” “怎么了秽澳?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長戏羽。 經(jīng)常有香客問我担神,道長,這世上最難降的妖魔是什么始花? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任妄讯,我火速辦了婚禮,結(jié)果婚禮上酷宵,老公的妹妹穿的比我還像新娘亥贸。我一直安慰自己,他們只是感情好浇垦,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布炕置。 她就那樣靜靜地躺著,像睡著了一般男韧。 火紅的嫁衣襯著肌膚如雪朴摊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天此虑,我揣著相機與錄音甚纲,去河邊找鬼。 笑死寡壮,一個胖子當(dāng)著我的面吹牛贩疙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播况既,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼这溅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棒仍?” 一聲冷哼從身側(cè)響起悲靴,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莫其,沒想到半個月后癞尚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乱陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年浇揩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憨颠。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胳徽,死狀恐怖积锅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情养盗,我是刑警寧澤缚陷,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站往核,受9級特大地震影響箫爷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聂儒,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一虎锚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薄货,春花似錦翁都、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至税娜,卻和暖如春坐搔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敬矩。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工概行, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弧岳。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓凳忙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親禽炬。 傳聞我的和親對象是個殘疾皇子涧卵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容