Base58编码实现示例

Base58编码简析与C++实现

参照:

https://en.wikipedia.org/wiki/Base58
https://en.wikipedia.org/wiki/Binary-to-text_encoding
https://en.bitcoin.it/wiki/Base58Check_encoding

Base58可以简单理解为将数据,以58进制的形式进行表示。
实现伪代码如下:

code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
   x = convert_bytes_to_big_integer(hash_result)

   output_string = ""

   while(x > 0) 
       {
           (x, remainder) = divide(x, 58)
           output_string.append(code_string[remainder])
       }

   repeat(number_of_leading_zero_bytes_in_hash)
       {
       output_string.append(code_string[0]);
       }

   output_string.reverse();

大值思路为:
1. 将数据转换为大整数x,
2. 依次将(x % 58)的值表示的编码添加到输出字符串末尾;
3. 令x = ( x / 58 );
4. 重复2-3,直到x等于0;
5. 将数据前所有0的编码(即“1”)添加到输出字符串末尾;
6. 将输出字符串反转,即为Base58编码字符串。

由于编码前数据可以视为256进制编码数据,所以转换为58进制编码数据后,数据长度为变长。
假设原长度为Len256,转换为长度为Len58,则:

Len58 = Len256 * ( log256 / log58 ) + 1

Bitcoin(0.16.0)中实现代码如下:

/** All alphanumeric characters except for "0", "I", "O", and "l" */
static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVW
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值