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)