Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用base64编码,为什么我会得到错误的答案?_Python_Base64_Encode - Fatal编程技术网

Python 使用base64编码,为什么我会得到错误的答案?

Python 使用base64编码,为什么我会得到错误的答案?,python,base64,encode,Python,Base64,Encode,我正在尝试对websocket进行身份验证。 在文档中的示例中,它表示如果我的客户nonce是: nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0 然后我应该使用base64对其进行编码,以获得: target = "8IyYyvH9gujOqYJdv/BP0A==". 我不确定我做错了什么,但我得到以下信息: client_nonce = 0xf08c98caf1fd82e8cea9825dbff04fd0 str_client_nonce = str

我正在尝试对websocket进行身份验证。 在文档中的示例中,它表示如果我的客户nonce是:

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')