[ Algorithm ] Base58 介紹

學習目標

  • 了解 Base58 特性、編碼表、計算方式與程式撰寫

特性

  • Bitcoin 用來產生錢包 address 的編碼方式
    • 不使用易於混淆文字
      • 例如:數字【 0 】、字母大寫【 O 】、
                    字母大寫 i【 I 】、字母小寫 L【 l 】與【 + 】、【 / 】符號
      • 換句話說 Base58 是由不包括( 0、O、l、I )的大小寫字母和數字所组成的
      • 字元集為 9 個數字、24 個大寫字母、25 個小寫字母

Base58 編碼表


計算方式

使用 Base58 編碼 【 Hello 】 的字串,最後會得到 【 9Ajdvzr 】的編碼結果。
  字元    ASCII 十進位
   H          72         *    2^32     =    309237645312
   e         101         *    2^24     =      1694498816
   l         108         *    2^16     =         7077888
   l         108         *    2^8      =           27648
   o         111         *    2^0      =             111

  ㊟ 總和:    309237645312 
           +   1694498816
                  7077888
                    27648
                      111 
           ---------------
           = 310939249775

  ㊟【 ^ 】 符號為 【 次方 】
  • 第二步
                                商         餘    Base58 查表
310939249775   /   58   =   5361021547    49        r  
  5361021547   /   58   =     92431405    57        z
    92431405   /   58   =      1593644    53        v
     1593644   /   58   =        27476    36        d
       27476   /   58   =          473    42        j
         473   /   58   =            8     9        A
           8   /   58   =            0     8        9

※ 使用 Base58 編碼 【 Hello 】 的字串,最後會得到 【 9Ajdvzr 】的編碼結果

Node.js 程式 【 Code 】


Reference
GitHub
List of blogs
ALL RIGHTS RESERVED. COPYRIGHT © 2018. Designed and Coded by Makee.io