[英]string as bytes python3
假设我得到了字符串(应该是一个字节):
"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
我想解码它,但它说它必须以字节为单位,所以我不得不以某种方式将其转向
b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='
我在聊天客户端上工作,当它发送数据(字节)时,通过服务器时到达它的另一端时,它以某种方式变成了字符串,它无法解码
ps:是加密,解码将给出随机数字和字母,客户端将对其解密
哦,而且,我真的不知道'='符号是否应该在那里,当我在我和我的朋友之间的测试中得到数据时,我像这样用字符串(顶部的那个)错误消息说它必须以字节为单位。
客户端代码的一部分(仅一行显示给所有人,其余是秘密):
base64.b64decode(that_string).decode('ascii')
它主要使用ascii,所以我认为这是对的,对吗?
更多信息:
base64.b64encode(message.encode('ascii'))
此处的消息用于获取从另一端发送的字符串
Room.message(str(secretEncrypt(par, codes())))
我不知道我怎么想念它,它在发送=。=之前先将其str好,它仍然需要将其转换为字节,我该怎么办呢?
以下工作原理
>>> import base64
>>> s = "Hello StackOwerflow!"
>>> b = s.encode()
>>> c = base64.b64encode(b)
>>> c
b'SGVsbG8gU3RhY2tPd2VyZmxvdyE='
>>> b1 = base64.b64decode(c)
>>> b1
b'Hello StackOwerflow!'
>>> b1.decode()
'Hello StackOwerflow!'
显示如何编码字符串
问题在这里:
Room.message(str(secretEncrypt(par, codes())))
secretEncrypt(...)
返回字节,但是随后执行str(b"thereturnvalue")
却没有执行您想要的操作:
>>> my_bytes = b"abc"
>>> type(my_bytes)
<class 'bytes'>
>>> str(my_bytes)
"b'abc'"
>>> type(str(my_bytes))
<class 'str'>
它将字节的字符串表示形式( repr
)放入字符串中,这就是为什么字符串以b"
开头的原因b"
如何最好地解决此问题取决于周围的代码。
secretEncrypt
函数返回字节,则使Room.message
也接受字节(并删除str(...)
Room.message
)。 secretEncrypt
返回一个字符串,消除对str(...)
secretEncrypt
的需要 最小的解决方案:解码来自secretEncrypt
返回的字节,将其转换为字符串。 像这样:
encrypted = secretEncrypt(par, codes()) Room.message(encrypted.decode("whatever-encoder-was-used"))
文本编码在哪里whatever-encoding-was-used
了编码(可能是utf-8
或ascii
,但是如果不看其余的代码就无法分辨)
而且我是对的,不需要过度考虑
字符串:
"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
只需要拆分即可,例如:
string = "b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
string = string.split("'")[1]
那会给我一个没有b'的字符串:
"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="
然后我只需要字节:
string = bytes(string, "ascii")
这将使我b'在字符串之外:
b"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="
ps:对于每个说出破解我的代码的人,它都将带有ID转储的随机巨型东西放入其中,如果您设法破解它,那么它的用处不大,反正它只是一个迷你聊天室的聊天客户端儿童游戏
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.