ToB企服应用市场:ToB评测及商务社交产业平台

标题: CRYPTO个人总结 [打印本页]

作者: 写过一篇    时间: 2023-11-26 17:44
标题: CRYPTO个人总结
Base系列编码浅析

Base编码有很多种,常用的有:base16   base32   base64   base85  base36  base 58  base91  base 92   base62Base16


:可以看到8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号“=”。  换句话说:Base16使用两个ASCII字符去编码原数据中的一个字节数据。  Base16编码是一个标准的十六进制字符串(注意是字符串而不是数值),更易被人类和计算机使用,因为它并不包含任何控制字符,以及Base64和Base32中的“=”符号。Base32


由于数据的二进制传输是按照8比特一组进行(即一个字节),因此Base32按5比特切分的二进制数据必须是40比特的倍数(5和8的最小公倍数)。
 
  例如输入单字节字符“%”,它对应的二进制值是“100101”,前面补两个0变成“00100101”(二进制值不足8比特的都要在高位加0直到8比特),从左侧开始按照5比特切分成两组:“00100”和“101”,后一组不足5比特,则在末尾填充0直到5比特,变成“00100”和“10100”,这两组二进制数分别转换成十进制数,通过上述表格即可找到其对应的可打印字符“E”和“U”,但是这里只用到两组共10比特,还差30比特达到40比特,按照5比特一组还需6组,则在末尾填充6个“=”。填充“=”符号的作用是方便一些程序的标准化运行,大多数情况下不添加也无关紧要,而且,在URL中使用时必须去掉“=”符号。
Base64


注:BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。
 
  如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:
 
    (1)先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。
       (2)在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。
 
  也就是说:
    当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;
    如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 
 
参考下表:

Base85

摘自wiki介绍的一个例子: Base36

Base36是一个二进制到文本编码表示方案的二进制数据以ASCII通过将其转化为一个字符串格式基数 -36表示。选择36十分方便,因为可以使用阿拉伯数字 0–9和拉丁字母 A–Z [1](ISO基本拉丁字母)表示数字。
每个base36位需要少于6位的信息来表示。
摘自wiki的一个例子:
  有符号的32位和64位整数分别最多只能容纳6个或13个base-36位数字(许多base-36位数字可能会使32位和64位整数溢出)。
  例如,在base-36中,“ 922337203685477575807 ” 的64位带符号整数最大值为“ 1Y2P0IJ32E8E7 ”。
  类似地,在base-36中,“ 2147483647 ” 的32位带符号整数最大值为“ ZIK0ZJ ”。
用于从BASE10编码BASE36的Python代码
  1. def base36encode(integer):
  2.     chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3.    
  4.      sign = '-' if integer < 0 else ''
  5.      integer = abs(integer)
  6.      result = ''
  7.      while integer > 0:
  8.          integer, remainder = divmod(integer, 36)
  9.          result = chars[remainder]+result
  10.       return sign+result
复制代码
Base58

设计Base58主要的目的是:
Base91

顾名思义,base91需要91个字符来表示ASCII编码的二进制数据。 从94个可打印ASCII字符(0x21-0x7E)中,以下三个字符被省略以构建base91字母:     -(破折号,0x2D)    \(反斜杠,0x5C)    '(撇号,0x27)
转换表由其余字符组成,如下所示。Base92

有关Base92的资料实在是很少,可参考这一篇博客:https://thenoviceoof.com/blog/projects/base92/
Base62

               26个小写字母+26个大写字母+10个数字=62 (1)62进制与10进制的互相转化
     2进制转10进制过程为: 从右到左用二进制的每个数去乘以2的相应次方,次方要从0开始。     62进制转10进制也类似,从右往左每个数*62的N次方,N从0开始。   那么,10进制转62进制也与10进制转2进制类似。  即:不断除以62取余数,然后倒序。 (2)关于短Url的转换 主要思路,维护一个全局自增的id,每来一个长url,将其与一个自增id绑定,然后利用base62将该自增id转换为base62字符串,即完成转换。 
Base100

也就是表情符
解码网址:https://aghorler.github.io/emoji-aes/

了解完简单base家族之后,来给大家总结一下常见编码。。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4