Base58編碼的長度是如何計算的?

2021-09-13 19:16:08 字數 680 閱讀 4637

base58 是由中本聰為bitcoin設計的。

相比與base64的字元,他將一些直**來模糊的字元去除了。

字元共58個

在一些base58的實現**中,我們往往需要為生成的編碼後的字串預留空間,這是如何計算的呢?

例如一段原始碼及注釋:

std::vectorb58((pend - pbegin) * 138 / 100 + 1); 

// log(256) / log(58), rounded up

這個公式看起來有點讓人摸不著頭腦,但經過一些思考,我想明白了。

在編碼後的字串中,每乙個字元都是從58個字元中當中選擇出來的。那麼這58種不同的資訊可以用多少bit來代替呢?顯然答案是log(2)58。換句話說,每乙個字母代表的資訊量是log(2)58 bit。

我們輸入的位元組流資訊量是固定的:(byte_length * 8)bit

那麼,需要預留的字元數量就是(byte_length * 8)/ log258

經過換算,

(byte_length * 8)/ log258 =

(byte_length * log2256) / log258 =

byte_length * 1.38

最後,還需要加向上取整

最終結果就是 byte_length * 1.37 + 1

base58編碼與解碼實現

base58編碼是位元幣位址生成演算法中的最後乙個步驟。演算法簡單,和上大學時候學過的十進位制轉十六進製制一樣,只不過現在變成了十進位制轉58進製,核心過程就是不斷的除58求餘。下面是go語言的實現過程 func base58encode data byte string bignum.divmod...

base64編碼是怎麼工作的

1 為什麼需要base64?ascii碼一共規定了128個字元的編碼,這128個符號,範圍在 0,127 之間.其中,0,31 及127,33個屬於不可列印的控制字元.在電子郵件傳輸資訊時,有些郵件閘道器會把 0,31 這些控制字元給悄悄清除.還有的早期程式,收到 128,255 之間的國際字元時,...

base64編碼是怎麼工作的

按 在布林教育php中級班的課堂上,有位同學問這樣乙個問題 我在用 base64 encode 對使用者名稱進行編碼時,會出來等號,是不是可以去掉?跟我來看完這篇文章,答案即揭曉.1 為什麼需要base64?ascii碼一共規定了128個字元的編碼,這128個符號,範圍在 0,127 之間.其中,0...