假设我有字符串(应该是一个字节):
"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
我希望解码它,但它说它必须以字节为单位,所以我必须以某种方式将其转换为
b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='
我正在聊天客户端,当它发送数据(字节)时,它会以某种方式变成一个字符串,当它通过服务器时,当它到达另一侧时,它无法解码它
ps:它是ENCRYPT,解码会给出随机数字和字母,客户端会解密它
哦,而且,我真的不知道'='符号应该在那里,当我在我和我的朋友之间的测试中获得数据时,我得到它就像那个字符串( top)错误说它必须是字节。客户端中的部分代码(只显示一行,其余部分是秘密):
base64.b64decode(that_string).decode('ascii')
它主要使用ascii所以我认为这是对的,对吗?
更多信息:
base64.b64encode(message.encode('ascii'))
此处的消息是用于获取从另一方发送的字符串
Room.message(str(secretEncrypt(par, codes())))
我不知道我是怎么想念它的,它在它发送=。=之前就是它 好吧,它仍然需要把它变成字节,我怎么这样做?
答案 0 :(得分:3)
以下内容非常有用
>>> 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!'
显示你如何编码字符串
答案 1 :(得分:3)
问题在于:
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"
如何最好地解决这个问题取决于周围的代码..或者:
secretEncrypt
函数返回字节,则使Room.message
也接受字节(并删除str(...)
强制转换)。 secretEncrypt
返回一个字符串,无需str(...)
强制转换最优雅的解决方案:解码从secretEncrypt
返回的字节,将其转换为字符串。像这样:
encrypted = secretEncrypt(par, codes())
Room.message(encrypted.decode("whatever-encoder-was-used"))
whatever-encoding-was-used
是文本编码的位置(可能是utf-8
或ascii
,但如果没有看到其他代码就无法判断)
答案 2 :(得分:0)
我是对的,不需要过度思考
字符串:
"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
只需要拆分,例如:
string = "b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
string = string.split("'")[1]
这会让我得到一个没有b'的字符串:
"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="
然后我只需要字节:
string = bytes(string, "ascii")
这会让我在字符串外面找到b':
b"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="
ps:对于那些谈论破解我的代码的人来说,它得到了randoms 如果你设法破解它,它没有太大用处,无论如何,它只是一个聊天客户端为孩子们的迷你聊天室游戏的mumbo jumbo事物