XoR两个十六进制

时间:2016-11-09 09:18:35

标签: python python-2.7 cryptography xor bitwise-xor

所以我试图找到一个时间键的键,我有10个密文。(明文字母编码为8位ASCII 并且给定的密文是用十六进制写的;我正在使用python 2.7)

这个想法是当你用一个空格的字符xor得到大写或小写时,当x​​x x用x时它返回零所以当我xor两个字符到ciphertexts我xor键与键和带有消息字符的消息字符。 所以我写了这个代码用于xoring两个十六进制。

 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函数的工作正常,但当键为奇数时,它不会返回相同的大写或小写字符。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

关于如何解决这个问题的一般想法,无视python:

让我们先说一下char是8位ascii

如果你看第一个字形第一个密文,你可能会注意到它超出了纯文本的ascii值,可以说是a-z 0x61-0x7a A-Z 0x41-0x5a

很有可能你只需要考虑这个值,使用这个char,使其成为指定值范围内的值

同样适用于其他9个文本及其各自的第一个字符

并且,有趣的是,此char的可能键值列表必须保持每个具有相同键的密文,因此我们看到的每个密文都会进一步缩小范围

现在,你可以用这种方法做什么?

编写一个带有2个参数(字节)的函数,并测试xor的结果是否落入指定范围,如果是,则返回1,如果没有返回0

现在制作3个嵌套循环来调用此函数

外部循环(X)遍历密文中的char位置 中间循环(Y)从0到255 内环(Z)通过密文

在内部循环中调用函数,参数1是Z密文的X字符,参数2是Y

现在该如何处理结果:

你想拥有一个字典/查找表,每个位置X包含255个元素的数组

这些元素的索引将为Y. 这些元素的值将是所有Z

的函数结果的总和

最后你所拥有的是密文中的每个位置,一个数组告诉你每个keybyte键的可能性......值越高,成为关键字节的概率越高

然后对于密文中的每个位置按可能的密钥字节顺序排列它们的概率

然后取一大块所有密文,让我们说出前8到16个字符,然后计算最高概率组中所有密钥的明文

将密钥块和明文块一起存储在列表中

现在测试你对普通词典的可能明文的列表,如果它们包含可以在字典中找到的单词,则再次评级为1,否则为0 ...总结所有不同的密文...(或使用另一个衡量一个密钥有多好的度量标准

按最高值排序关键块(读取:可能解决所有密文中最多块的密钥首先出现,生成垃圾的密钥最后出现)并继续下一个块......

用更大的块重复此操作,选择不是keybytes而是选择下一个较小的key块,直到你的chunksize达到密文大小......

当然这是一种查找可能密钥的自动方式,在您拥有完全自动化的解决方案之前,还有一些实施工作。如果您只是想解决这10个密文,您可以在可能的密钥字节或第一个块之后中止该方法,并手动完成剩下的工作......