fbpx
维基百科

Base58

Base58是用于比特幣(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。

设计Base58主要的目的是:

  1. 避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。
  2. 不使用"+"和"/"的原因是非字母或数字的字符串作为帐号较难被接受。
  3. 没有标点符号,通常不会被从中间分行。
  4. 大部分的软件支持双击选择整个字符串。

以下引用自其作者中本聰(Satoshi Nakamoto)在base58.h中的注释:

// // Why base-58 instead of standard base-64 encoding? // - Don't want 0OIl characters that look the same in some fonts and // could be used to create visually identical looking account numbers. // - A string with non-alphanumeric characters is not as easily accepted as an account number. // - E-mail usually won't line-break if there's no punctuation to break at. // - Doubleclicking selects the whole number as one word if it's all alphanumeric. // 

编码

一個Base58"字元"可以表示的位元數為Log258 5.858 bits。經過Base58編碼的數據為原始的數據長度的 倍,稍微多於Base64的1.33倍。

編碼符號表:

编码 字符 编码 字符   编码 字符   编码 字符
0 1 16 H 32 Z 48 q
1 2 17 J 33 a 49 r
2 3 18 K 34 b 50 s
3 4 19 L 35 c 51 t
4 5 20 M 36 d 52 u
5 6 21 N 37 e 53 v
6 7 22 P 38 f 54 w
7 8 23 Q 39 g 55 x
8 9 24 R 40 h 56 y
9 A 25 S 41 i 57 z
10 B 26 T 42 j
11 C 27 U 43 k
12 D 28 V 44 m
13 E 29 W 45 n
14 F 30 X 46 o
15 G 31 Y 47 p

由於256不能被58所整除,Base58無法像Base64那樣子轉換為8位元的二進位後依次取出6位元,就可以快速完成轉換;因此,Base58編碼演算法需要除法運算實現。如果被編碼的數據較長,則要用特殊的class來處理大數,在Bitcoin使用了OpenSSL中的BIGNUM:

 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(); 

外部链接

参见

base58, 此條目需要补充更多来源, 2014年1月26日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 是用于比特幣, bitcoin, 中使用的一种独特的编码方式, 主要用于产生bitcoin的钱包地址, 相比base64, 不使用数字, 字母大写, 字母大写, 和字母小写, 以及, 符号, 设计主要的目的是, 避免混淆, 在. 此條目需要补充更多来源 2014年1月26日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而移除 致使用者 请搜索一下条目的标题 来源搜索 Base58 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 Base58是用于比特幣 Bitcoin 中使用的一种独特的编码方式 主要用于产生Bitcoin的钱包地址 相比Base64 Base58不使用数字 0 字母大写 O 字母大写 I 和字母小写 l 以及 和 符号 设计Base58主要的目的是 避免混淆 在某些字体下 数字0和字母大写O 以及字母大写I和字母小写l会非常相似 不使用 和 的原因是非字母或数字的字符串作为帐号较难被接受 没有标点符号 通常不会被从中间分行 大部分的软件支持双击选择整个字符串 以下引用自其作者中本聰 Satoshi Nakamoto 在base58 h中的注释 Why base 58 instead of standard base 64 encoding Don t want 0OIl characters that look the same in some fonts and could be used to create visually identical looking account numbers A string with non alphanumeric characters is not as easily accepted as an account number E mail usually won t line break if there s no punctuation to break at Doubleclicking selects the whole number as one word if it s all alphanumeric 编码 编辑一個Base58 字元 可以表示的位元數為Log258 displaystyle approx 5 858 bits 經過Base58編碼的數據為原始的數據長度的8 5 858 1 37 displaystyle tfrac 8 5 858 approx 1 37 倍 稍微多於Base64的1 33倍 編碼符號表 编码 字符 编码 字符 编码 字符 编码 字符0 1 16 H 32 Z 48 q1 2 17 J 33 a 49 r2 3 18 K 34 b 50 s3 4 19 L 35 c 51 t4 5 20 M 36 d 52 u5 6 21 N 37 e 53 v6 7 22 P 38 f 54 w7 8 23 Q 39 g 55 x8 9 24 R 40 h 56 y9 A 25 S 41 i 57 z10 B 26 T 42 j11 C 27 U 43 k12 D 28 V 44 m13 E 29 W 45 n14 F 30 X 46 o15 G 31 Y 47 p由於256不能被58所整除 Base58無法像Base64那樣子轉換為8位元的二進位後依次取出6位元 就可以快速完成轉換 因此 Base58編碼演算法需要除法運算實現 如果被編碼的數據較長 則要用特殊的class來處理大數 在Bitcoin使用了OpenSSL中的BIGNUM code string 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz x convert bytes to big integer hash result output string while x gt 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 外部链接 编辑http www bitcoin org 页面存档备份 存于互联网档案馆 https en bitcoin it wiki Base58Check encoding 页面存档备份 存于互联网档案馆 参见 编辑Base64 取自 https zh wikipedia org w index php title Base58 amp oldid 70820382, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。