Python 使用base64编码,为什么我会得到错误的答案?
我正在尝试对websocket进行身份验证。 在文档中的示例中,它表示如果我的客户nonce是:Python 使用base64编码,为什么我会得到错误的答案?,python,base64,encode,Python,Base64,Encode,我正在尝试对websocket进行身份验证。 在文档中的示例中,它表示如果我的客户nonce是: nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0 然后我应该使用base64对其进行编码,以获得: target = "8IyYyvH9gujOqYJdv/BP0A==". 我不确定我做错了什么,但我得到以下信息: client_nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0 str_client_nonce = str
nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0
然后我应该使用base64对其进行编码,以获得:
target = "8IyYyvH9gujOqYJdv/BP0A==".
我不确定我做错了什么,但我得到以下信息:
client_nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0
str_client_nonce = str(client_nonce)
encoded = b64encode(bytes(str_client_nonce, 'utf-8'))
print(encoded)
>> b'MzE5NzQ0NzM5NTUzODE1NjMyMTAxNjk0MjM1NzExODU0NjI4ODE2'
对于初学者来说,
0xf08c98caf1fd82e8cea9825dbff04fd0
是Python中的一个数字(例如,0x10
是另一种写入16的方式)。但是一个数字并不是你实际拥有的,你有一个字节列表的十六进制表示,也被称为十六进制字符串
所以要做的事情是:
- 去掉
,使用字符串0x
- 将该字符串解码为字节
- 将这些字节编码为base64
实际的nonce总是字节。正在使用不同的方法来表示/存储/传输这些字节。使用十六进制字符串是一种常见的方法。使用base64是另一种选择。十六进制字符串和base64都有相同的用途:以字符串形式存储任意字节以便于处理。Base64恰好比十六进制字符串需要更少的空间,这就是为什么它经常被首选的原因。上面的代码只是将字节的一种字符串表示形式转换为另一种。对于初学者来说,
0xf08c98caf1fd82e8cea9825dbff04fd0
是Python中的一个数字(例如,0x10
是写入16的另一种方式)。但是一个数字并不是你实际拥有的,你有一个字节列表的十六进制表示,也被称为十六进制字符串
所以要做的事情是:
- 去掉
,使用字符串0x
- 将该字符串解码为字节
- 将这些字节编码为base64
实际的nonce总是字节。正在使用不同的方法来表示/存储/传输这些字节。使用十六进制字符串是一种常见的方法。使用base64是另一种选择。十六进制字符串和base64都有相同的用途:以字符串形式存储任意字节以便于处理。Base64恰好比十六进制字符串需要更少的空间,这就是为什么它经常被首选的原因。上面的代码只是将字节的一个字符串表示形式转换为另一个。您必须直接将
nonce
转换为bytes
。不是字符串
表示
通过
您必须直接将
nonce
转换为bytes
。不是字符串
表示
通过
str(client\u nonce)
为您提供“0xf08…”,而您可能需要将其直接转换为字节:
client_nonce.to_bytes(2, byteorder='big')
str(client\u nonce)
为您提供“0xf08…”,而您可能需要将其直接转换为字节:
client_nonce.to_bytes(2, byteorder='big')
UTF-8在那里干什么?对字节进行编码。删除“utf-8”参数会产生以下错误:TypeError:没有编码的字符串参数utf-8在其中做什么?对字节进行编码。删除“utf-8”参数会产生以下错误:类型错误:没有编码的字符串参数调用
nonce=0xf08c98caf1fd82e8cea9825dbff04fd0
和nonce.to_字节(2,byteorder='big')
给我溢出错误:int太大而无法转换
。调用nonce=0xf08c98caf1fd82e8cea9825dbff04fd0
和nonce.to_字节(2,byteorder='big')
给我溢出错误:int太大而无法转换
。为什么在base64\u nonce的末尾有一个换行字符?这是由base64.encode()添加的
。您可以使用.strip()
将其删除。换行符在base64编码中没有任何意义,因此保留它不会中断任何内容。为什么base64的末尾有换行符?这是由base64.encodebytes()添加的。
。您可以使用.strip()
将其删除。换行在base64编码中没有任何意义,因此保留它不会破坏任何东西。
b'\xf0\x8c\x98\xca\xf1\xfd\x82\xe8\xce\xa9\x82]\xbf\xf0O\xd0'
base64.b64encode(b)
b'8IyYyvH9gujOqYJdv/BP0A=='
client_nonce.to_bytes(2, byteorder='big')