str和bytes(base58,base64,ascii)类型的转换

string是字符串,bytes是字节串

base58和base64是两种编码方式,base58常用于用户容易分辨的公钥、私钥和地址,而base64则应用于签名

utf-8也是一种编码方式

base62,包括0-9,a-z,A-Z

base64,包括0-9,a-z,A-Z,+和/

base58比base64少了容易混淆的数字0、大写字母O,小写字母l(L的小写),大写字母I(i的大写),以及+和/,这6个字符。

1.str转bytes之base64

str1="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"    注意str的长度要足够长

x=base64.b64decode(str1)

2.bytes之64转str

str1=base64.b64encode(x)

此时,str1是一个bytes之ascii类型,再进行一次:bytes之ascii转str,如下:

str1=str(str1,encoding='utf-8')

注:base58与base64的使用方法相同

3.str转bytes之utf-8

x=bytes(str1,encoding='utf-8')


 

特点:

1.同样的字符串,选择不同的编码方式转换成字节串,其长度可能减少(utf-8转utf-8则不变字节数,转其他的会减少),但不同的编码方式,其长度和内容均不同。

2.base58是base64的转码是与str直接转进行的,所以,如果str里面包含了无法识别的字符,则转码失败。

3.相同的一个字符串,转字节串后,分别使用utf-8,base58,base64,其长度和内容均不同。


 

 转换实操:

sig = "dsasfdsfdsfs"

print(len(sig))

sig = base58.b58decode(sig)

print(len(sig),sig)

sig=bytesToGF16vec(sig)

print(len(sig),sig)

正常,返回:

12
9 b'1\xf1\xc2-#l\tu\x16'
18 (1, z^2 + z + 1, 1, z^3 + 1, z^2 + z, z^3 + z^2 + z, z^3 + z^2 + z + 1, z^2 + z, z^2 + z + 1, z^2 + z, z^3 + z^2 + z, z^2, z^3 + z^2 + 1, 0, z + 1, z^2 + 1, z^2, 1)

如果把上面的sig改成包含非base58识别的字符,例如:sig=uqOHyQsnU6tIdHtKSBJ9fhDLgD4Zftq1fs3FBYUEmTWNU2SjDeYiXSLEfSErQsrdXblEdm+WGNHcTma5O8Fswg==,则会报错,因为含有base58所不能识别的字符。此时,修改为base64,则正常。

sig  = "uqOHyQsnU6tIdHtKSBJ9fhDLgD4Zftq1fs3FBYUEmTWNU2SjDeYiXSLEfSErQsrdXblEdm+WGNHcTma5O8Fswg=="

print(len(sig))

sig = base64.b64decode(sig)

print(len(sig),sig)

sig=bytesToGF16vec(sig)

print(len(sig),sig)

返回:

88
64 b'\xba\xa3\x87\xc9\x0b\'S\xabHt{JH\x12}~\x10\xcb\x80>\x19~\xda\xb5~\xcd\xc5\x05\x85\x04\x995\x8dSd\xa3\r\xe6"]"\xc4}!+B\xca\xdd]\xb9Dvo\x96\x18\xd1\xdcNf\xb9;\xc1l\xc2'
128 (z^3 + z, z^3 + z + 1, z^2 + z + 1, z^3 + z, z^2 + 1, z^3 + z^2, z^3 + z^2 + 1, z^3 + z^2 + z, z^3 + z + 1, 0, z^2 + 1, z^2 + z, z^2 + z + 1, z + 1, z^3 + z + 1, z^3 + z, z^3 + z^2, z, z, z^2 + 1, z^3 + z + 1, z^2 + 1, z^3 + z, z, z^3 + z^2, z, z^2 + z, 1, z^3 + z^2 + z + 1, z^2 + 1, z^3, z^2 + 1, 0, 1, z^3 + z + 1, z^3 + z^2 + z, 0, z^3 + z^2, z^3, z^2 + z + 1, z^3 + z^2 + 1, 1, z^3, z^2 + 1, z^3 + z, z^3 + z^2 + z + 1, z + 1, z^3 + z + 1, z^3, z^2 + 1, z^3 + z^2 + z + 1, z^3 + z^2 + z, z + 1, z^3 + z^2 + z, z + 1, 0, z + 1, z^3 + z^2, z, 0, z^3 + z^2 + 1, z^3 + z^2 + 1, z + 1, z^2 + z + 1, z^3 + z^2 + z + 1, z^3 + z^2, z^2 + z + 1, z + 1, z, z^2, z^2 + z + 1, z^3 + z, z^3 + z^2 + z + 1, 0, z^2, z^3, z^2 + z, z^2 + z, z^3 + z^2 + z + 1, z + 1, z^2 + z, z^2 + z, z, z^3 + z^2 + z, z^3 + z^2 + z + 1, z^2 + 1, 1, z^2 + z, z^3 + z + 1, z^2 + z, z^2 + z, z, z^3 + z, z^3 + z^2 + z, z^3 + z^2 + z + 1, z^3 + z^2 + z + 1, z^3 + z^2 + z + 1, z + 1, z^3 + z^2 + 1, z^3 + z + 1, z, z, z^2, z^2 + 1, z^3 + 1, z^2, z^2, z^3 + z^2 + 1, z^3 + z^2, 1, 1, z^3 + z^2 + z + 1, z^3 + z^2 + z, z^3 + z^2 + z + 1, z^3, z, z^2, z^2, z^3 + z^2 + 1, z^3 + z + 1, z^3 + z + 1, z^2 + z + 1, 1, z^3 + z^2 + z, z^3 + z^2 + z, z^2, z^2 + z, z^3 + z^2 + z)

 

posted on 2022-08-30 21:19  RicLiu  阅读(515)  评论(0编辑  收藏  举报