【问题标题】:Add 1 bit to a string向字符串添加 1 位
【发布时间】:2013-03-21 10:50:19
【问题描述】:

我正在寻找一种在 Python 中“将 '1' 位附加到消息”的方法,以便重新创建提到的 MD5 算法 here

这是我所做的,但问题是msg实际上是一个字符串:

msg.append(0x01)         
while len(msg)%56!=0: 
     msg.append(0x00)      

我该怎么办?

【问题讨论】:

  • 如果您使用的是 Python 3,也许转换为 bytes 有用?例如,bytes(msg.encode('utf-8'))
  • 对于 python 中的 md5 实现,请参阅 this 脚本。
  • 为什么要追加? 概念上 MD5 要求您附加一些东西,但实际上您可以先通过算法运行“消息”,然后单独运行“尾部”(无需重置其间的状态,当然)。

标签: python string md5 bit-manipulation


【解决方案1】:

使用chr 将字节值转换为字符串。然后你可以将它们附加到msg

msg += chr(0x01 << 8)
while len(msg)%56 != 0:
    msg += chr(0x00)

在 Python 2.7 中,ASCII 字符串中的每个字符都是 8 位大。因此,使用这种方法,您并不是每次都真正添加“1 位”。这就是为什么有必要将 1 参数左移八次。否则,您将在字符串中添加0b00000001,而不是所需的0b10000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2023-03-13
    相关资源
    最近更新 更多