繁体   English   中英

字符串作为字节python3

[英]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-8ascii ,但是如果不看其余的代码就无法分辨)

而且我是对的,不需要过度考虑

字符串:

"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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM