【发布时间】:2026-01-23 00:05:01
【问题描述】:
所以我试图找到一个时间垫的密钥,我有 10 个密文。(明文字母被编码为 8 位 ASCII 并且给定的密文是用十六进制写的;我正在使用python 2.7)
这个想法是,当你对一个带有空格的字符进行异或运算时,该字符变为大写或小写,而当你对 x 进行异或运算时,它返回零,所以当我对密文的两个字符异或时,我将密钥与密钥和消息字符与消息字符。 所以我写了这段代码来异或两个十六进制。
def hex_to_text(s):
string=binascii.unhexlify(s)
return string
def XoR (a,b):
a="0x"+a
b="0x"+b
xor=chr(int(a,16) ^ int(b,16))
return hex_to_text(xor[2:])
当键是偶数时,xor 函数可以正常工作,但当键是奇数时,它不会返回相同的大写或小写字符。
我做错了什么?
【问题讨论】:
-
如果你有十个密文使用同一个一密,那它就不是一密,而是十密。如果它是一个真正的 One Time Pad,那么你找不到关键,你所能做的就是找到所有可能的关键,给出一个可理解的输出。
-
它们都用相同的密钥加密,练习的黄金是找到密钥
-
十个时间垫是可以解决的。只需为每个位置尝试不同的关键字母,直到所有十个文本都有意义。
标签: python python-2.7 cryptography xor bitwise-xor