美文网首页
Base58编码 和 Base64 编码的区别与联系

Base58编码 和 Base64 编码的区别与联系

作者: 问我学院 | 来源:发表于2021-04-05 11:19 被阅读0次

    一. 概述

    base58和base64一样是一种二进制转可视字符串的算法,主要用来转换大整数值。区别是,转换出来的字符串,去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。不同的应用实现中,base58 最后查询的字母表可能不同,所以没有具体的标准。下面是几个应用中的字母表

    二. Base58

    Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I(发音ai)",和字母小写"l(发音erlo)",以及"+“和”/"符号。设计Base58主要的目的是避免混淆,在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。不使用"+“和”/"的原因是非字母或数字的字符串作为帐号较难被接受。没有标点符号,通常不会被从中间分行。

    由于256不能被58整除,Base58无法像Base64那样转换为8bits的2进制后依次取出6bits就可以快速完成转换。Base58编码算法需要除法运算实现,如果被编码的数据较长,则要用特殊的类来处理大数,在Bitcoin使用了OpenSSL中的BIGNUM

    三. Base64

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

    采用一种用于URL的改进Base64编码,它在末尾填充’='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”

    1 先把 “每三个8 Bit 的字节” 转换为 “四个6 Bit 的字节” (3X8 = 4X6 = 24),

    2 再把6Bit的添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

    例子:

    转换前 11111111, 11111111, 11111111 (二进制)转换后 00111111, 00111111, 00111111, 00111111 (二进制)

    规则

    编码的规则:①.把3个字节变成4个字节。

    ② 每76个字符加一个换行符。

    ③.最后的结束符也要处理。

    原文的字节数量应该是3的倍数,如果这个条件不能满足的话,具体的解决办法是这样的:原文剩余的字节根据编码规则继续单独转(1变2,2变3;不够的位数用0补全),再用=号补满4个字节。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。

    Base64转换码表64个:

    一 : 26 + 26 =52个英文字母

    二 : 0-9 共10个数字

    三 :+ 和 /

    A的索引是0 ,其他依次增长 + 为62 ; / 为 63

    转换表:

    原文链接:http://www.wenwoha.com/blog_detail-144.html

    相关文章

      网友评论

          本文标题:Base58编码 和 Base64 编码的区别与联系

          本文链接:https://www.haomeiwen.com/subject/dycdkltx.html