【问题标题】:Python how to concatenate string to bytes with \xPython 如何使用 \x 将字符串连接到字节
【发布时间】:2021-07-20 10:42:00
【问题描述】:

我正在尝试将字符串消息添加到表示用于 tcp 传输的消息的签名摘要的字节中。客户端将签名摘要作为字节,将消息作为字符串。

digest = b'd-\xfc*\x7f\xfc\xabr6S>\xa5\xe5\xff\xdd\x80o\xf2\x93\xa0\xdeR\x7f\x1e%W\x81Z\xf2\x06\x12(\x1c\xad"\x1a\x8aNFE\x8ba\x82\xfc\xe19\xe2\x80\x87\xa7\xcf\xbe\x88\xd3\x11}4\r\xc3\x94E\x11#\xbc\x8cF\xd4D+\xdb@e\xb5\x0cVC\x12\x04|J\x9ey\xb8\x88[@\x00ib\xae\x12\xb0\xca\x14X@\rl\xdf\x97\xf4rra\xf1\xa4\xc1\x07\xe2r\xf4\x8f]\xcb\x02\x95\x90z\xc8\x9d\xa6\xa7\x0b^\xc3t\xb8\x01\x89N\xa3\t,\x1c\x06ki\xdb\xdb\x9a6\xbd\xb3W\xfdQ\xeai1\xe2z\xe1Td\xd0\xa0\xc7N\xe4W\x8f\xa0\x8fz`6\x12<\xe9\xdd\xe6:\xfci\xae\x0e\xc3\xfeQ\xaa\xefFw{\x84Ly]\xfc\xe0\xf3G\xa8\xfeA\x9d\xb5+s\xc1\xdf\x98\xb7\xdb.tp+\xd1\xbe\xe1\x15\xba\xa3\xfb\xee\xcf\xf4\x1d\xec\x853Y\xc2\xec\x1cf\x1a5%\xb2!o\x88\x83\x14\x1d"2\xaa\xdc\x03\x97\xd2\xc7\xba\xe8\xe9\x81\xb9\xd0%\xdf\x98b\xf0'

message = hello"

如果我使用 message.encode() 消息被转换为字节,但它是 b'hello' 没有 \x。

如果我与digest + message 连接,客户端现在有这个:md: b'd-\xfc*\x7f\xfc\xabr6S>\xa5\xe5\xff\xdd\x80o\xf2\x93\xa0\xdeR\x7f\x1e%W\x81Z\xf2\x06\x12(\x1c\xad"\x1a\x8aNFE\x8ba\x82\xfc\xe19\xe2\x80\x87\xa7\xcf\xbe\x88\xd3\x11}4\r\xc3\x94E\x11#\xbc\x8cF\xd4D+\xdb@e\xb5\x0cVC\x12\x04|J\x9ey\xb8\x88[@\x00ib\xae\x12\xb0\xca\x14X@\rl\xdf\x97\xf4rra\xf1\xa4\xc1\x07\xe2r\xf4\x8f]\xcb\x02\x95\x90z\xc8\x9d\xa6\xa7\x0b^\xc3t\xb8\x01\x89N\xa3\t,\x1c\x06ki\xdb\xdb\x9a6\xbd\xb3W\xfdQ\xeai1\xe2z\xe1Td\xd0\xa0\xc7N\xe4W\x8f\xa0\x8fz`6\x12<\xe9\xdd\xe6:\xfci\xae\x0e\xc3\xfeQ\xaa\xefFw{\x84Ly]\xfc\xe0\xf3G\xa8\xfeA\x9d\xb5+s\xc1\xdf\x98\xb7\xdb.tp+\xd1\xbe\xe1\x15\xba\xa3\xfb\xee\xcf\xf4\x1d\xec\x853Y\xc2\xec\x1cf\x1a5%\xb2!o\x88\x83\x14\x1d"2\xaa\xdc\x03\x97\xd2\xc7\xba\xe8\xe9\x81\xb9\xd0%\xdf\x98b\xf0hello'

但是在传输和未加密之后,编码的字符串消息不再存在。服务器只接收:md: b'd-\xfc*\x7f\xfc\xabr6S>\xa5\xe5\xff\xdd\x80o\xf2\x93\xa0\xdeR\x7f\x1e%W\x81Z\xf2\x06\x12(\x1c\xad"\x1a\x8aNFE\x8ba\x82\xfc\xe19\xe2\x80\x87\xa7\xcf\xbe\x88\xd3\x11}4\r\xc3\x94E\x11#\xbc\x8cF\xd4D+\xdb@e\xb5\x0cVC\x12\x04|J\x9ey\xb8\x88[@\x00ib\xae\x12\xb0\xca\x14X@\rl\xdf\x97\xf4rra\xf1\xa4\xc1\x07\xe2r\xf4\x8f]\xcb\x02\x95\x90z\xc8\x9d\xa6\xa7\x0b^\xc3t\xb8\x01\x89N\xa3\t,\x1c\x06ki\xdb\xdb\x9a6\xbd\xb3W\xfdQ\xeai1\xe2z\xe1Td\xd0\xa0\xc7N\xe4W\x8f\xa0\x8fz`6\x12<\xe9\xdd\xe6:\xfci\xae\x0e\xc3\xfeQ\xaa\xefFw{\x84Ly]\xfc\xe0\xf3G\xa8\xfeA\x9d\xb5+s\xc1\xdf\x98\xb7\xdb.tp+\xd1\xbe\xe1\x15\xba\xa3\xfb\xee\xcf\xf4\x1d\xec\x853Y\xc2\xec\x1cf\x1a5%\xb2!o\x88\x83\x14\x1d"2\xaa\xdc\x03\x97\xd2\xc7\xba\xe8\xe9\x81\xb9\xd0%\xdf\x98b\xf0'

这里有什么问题,我该如何解决?

【问题讨论】:

  • 如何发送?你如何收到它?你如何对其进行加密?也许问题不在于如何将字符串添加到字节,而在于如何发送更多字节的数据。也许服务器配置为始终获取相同数量的字节 - 所以它会切断您的消息。

标签: python string encryption byte


【解决方案1】:

您的计算机不显示 ASCII 字母和数字的 \x 代码。 \x 显示无法以 ASCII 或 UTF-8 解码的字节。当您执行message.encode() 时,“hello”字符串会变成“hello”字节。计算机将其注册为 \x 东西,但在显示给您之前会对其进行解码。

至于为什么它没有出现,我猜这与你加密它的方式有关。摘要变量的长度为 256 字节。根据您使用的加密方法或您是否正确填充数据,不适合块的多余数据(在本例中为字节“hello”)会丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2015-01-21
    • 2021-03-27
    相关资源
    最近更新 更多