字符串作为字节python3



假设我得到了字符串(应该是一个字节):

"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"

我想解码它,但它说它必须以字节为单位,所以我必须以某种方式将其转换为

b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='

我在一个聊天客户端上工作,当它发送数据(字节)时,它在通过服务器时不知怎么变成了一个字符串,当它到达另一端时,它无法解码

ps:它是ENCRYPT,解码会给出随机数字和字母,客户端会解密它

哦,而且,我真的不知道'='符号是否应该在那里,当我在我和我朋友之间的一次测试中得到数据时,我得到了它,就像那个字符串(顶部的那个),错误是它必须以字节为单位。

客户端中的部分代码(只有一行向所有人显示,其余为秘密):

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" 开头

如何最好地解决这个问题取决于周围的代码。。任一:

  • 如果secretEncrypt函数返回字节,则使Room.message也接受字节(并删除str(...)强制转换)
  • 使secretEncrypt返回一个字符串,从而不需要str(...)强制转换
  • 最不优雅的解决方案:解码从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转储到其中的繁琐事情,如果你设法破解它,它没有多大用处,而且无论如何,它只是一个聊天客户端,用于儿童的迷你聊天室游戏

相关内容

  • 没有找到相关文章

最新更新