WebSocketを認証しようとしています。ドキュメントの例では、クライアントのナンスが次のとおりであるかどうかが示されています。
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を書く別の方法です)。しかし、数値は実際に持っているものではありません。バイトのリストの16進表現があり、16進文字列とも呼ばれます。
だからやるべきこと:
0x
、文字列を使用します。コード:
import base64
nonce_hex = 'f08c98caf1fd82e8cea9825dbff04fd0'
nonce = bytearray.fromhex(nonce_hex)
base64_nonce = base64.encodebytes(nonce)
# -> b'8IyYyvH9gujOqYJdv/BP0A==\n'
実際のナンスは常にバイトです。これらのバイトを表現/保存/転送するためにさまざまな方法が使用されています。16進文字列の使用は1つの一般的な方法です。base64の使用は別です。16進文字列とbase64はどちらも同じ目的を果たします。つまり、処理を容易にするために任意のバイトを文字列形式で格納します。Base64は、たまたま16進文字列よりも必要なスペースが少ないため、多くの場合、Base64が推奨されます。上記のコードは、バイトの1つの文字列表現を別の文字列表現に変換するだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加