对于Cryptopals挑战4组1,我没有获得预期的结果。
该程序的概念,以检查是否已对这300个字符串中的任何一个进行了单个字符的XORd运算。因此,采用蛮力手段,我的解决方案是将每个字符串与键盘上的每个字符进行异或,然后检查是否有任何结果产生英语句子。如果不是,则检查下一个字符串。这是我的代码:
MY_DICT = {}
index = 0
my_plaintext = "Now that the party is jumping"
#fills the dictionary with hex strings from the txt file
with open("hexstrings.txt") as f:
my_list = f.readlines()
for x in my_list:
MY_DICT[index] = x.rstrip('\n')
index = index + 1
i=0
input() #this is just here to help me keep track of where i am when running it
#this loop fills possible_plaintext with all the possible 255 XORs of the i'th string
#of the dictionary that was previously filler from the txt file
for i in range(326):
possible_plaintexts = brute_force_singlechar_xor(MY_DICT[i])
print(possible_plaintexts)
if possible_plaintexts == my_plaintext: #line of concern
print("ya found it yay :) ")
我确定myBruteForce函数能够正常工作,因为它在最后一个问题上正常工作,在该问题上,我对字符串进行所有可能的字符异或。我也知道纯文本是我看到的解决方案。我只是不确定为什么我的程序无法识别明文不在字典中。
(我知道使用评分系统对每个字符串进行评分以查看其是否接近英语会更容易,但这是我现在选择这样做的方式,直到我弄清楚如何获得评分功能工作/:)
答案 0 :(得分:0)
您的字典“ possible_plaintexts”在打印时的感觉如何? 您能在印刷文字中找到解决方案吗?如何打印?
解密后的字符串还应该有一个'\ n'字符。