本帖最后由 jerryxjr1220 于 2016-11-16 07:29 编辑
我的解答:利用英语文章中空格最多的特点,先用空格异或密文,然后统计转换后的字母哪个出现次数最多就是密钥。
- file = "91,33,6,22,85,41,28,6,30,22,25,78,28,19,78,57,26,6,29,89,78,16,29,15,3,1,11,1,85,95,90,85,95,83,60,0,83,1,6,22,85,12,22,18,7,29,27,7,29,18,78,7,29,11,83,34,1,1,17,78,18,25,28,22,20,10,10,85,11,11,28,29,7,16,10,93,85,38,22,85,25,18,6,78,4,28,26,27,85,41,28,17,66,83,20,0,23,85,6,22,85,25,18,6,78,52,26,10,93,85,92,83,61,11,83,2,15,0,85,7,29,85,26,27,16,78,17,16,9,26,27,0,26,27,9,83,2,7,7,29,78,52,26,10,93,85,93,83,61,11,83,22,28,22,20,26,22,17,78,22,3,11,1,12,26,27,28,0,20,85,26,27,16,28,22,85,7,0,91,78,61,26,26,27,28,0,20,85,11,11,28,29,7,6,78,7,29,15,7,85,6,22,85,10,26,17,0,84,1,78,30,20,5,22,91,78,71,85,34,26,19,11,83,28,26,0,16,2,21,85,25,18,6,78,26,27,78,27,28,3,95,85,15,29,17,78,7,29,7,0,85,2,26,19,11,83,18,7,5,16,29,83,25,7,20,29,26,83,1,1,83,16,24,22,7,23,28,27,11,93,85,91,83,33,6,22,85,2,26,18,6,7,85,29,27,28,0,22,6,78,7,29,28,28,0,9,27,85,26,27,16,78,23,20,28,24,27,11,0,6,66,83,20,0,23,85,26,27,16,78,23,20,28,24,27,11,0,6,78,16,20,0,83,27,11,5,16,28,83,16,22,7,28,0,20,0,7,0,29,78,26,1,64,83,67,78,52,26,10,83,6,11,29,1,78,57,26,6,29,85,26,27,16,78,49,20,30,7,28,29,7,85,89,83,1,1,83,1,11,31,25,78,22,3,11,1,12,1,29,16,78,18,23,1,6,1,78,7,29,11,83,25,7,20,29,26,83,6,1,83,1,6,18,1,78,22,3,11,1,12,1,29,16,78,30,28,9,27,1,78,17,16,2,26,16,24,22,85,12,22,22,15,6,6,11,83,26,8,83,29,7,0,85,26,22,6,26,26,24,1,29,12,64,83,77,78,57,26,6,29,85,6,26,24,29,22,25,8,83,2,15,0,85,0,28,1,78,7,29,11,83,25,7,20,29,26,72,85,6,22,85,25,18,6,78,28,27,2,10,85,15,83,2,7,7,27,11,0,6,78,7,26,78,7,29,11,83,25,7,20,29,26,93,85,87,83,33,6,22,85,1,29,16,78,4,29,1,83,28,29,83,1,6,22,85,26,1,0,11,83,25,7,20,29,26,95,85,25,27,26,78,20,28,24,22,6,78,31,28,9,27,1,78,7,26,78,22,3,11,1,12,1,29,16,66,83,2,15,0,85,9,28,28,0,20,85,26,28,85,13,28,24,11,83,28,0,7,26,78,7,29,11,83,2,1,1,25,10,93,85,95,67,85,44,6,1,78,18,25,26,27,26,27,20,29,78,7,29,11,83,2,1,1,25,10,83,2,15,0,85,3,18,17,11,83,1,6,1,26,27,20,29,78,27,28,3,95,85,26,27,16,78,4,26,28,31,17,78,23,28,10,29,82,26,83,7,11,16,26,9,29,28,20,22,85,6,26,24,78,4,29,11,29,85,6,22,85,13,18,24,11,93,85,95,66,85,43,5,16,0,83,28,0,83,29,7,0,85,1,4,27,78,31,20,0,23,85,15,29,17,78,18,24,1,29,18,78,27,28,29,83,26,25,29,85,30,22,26,30,31,16,66,83,29,11,83,2,15,0,85,0,28,1,78,18,22,13,22,5,26,22,17,64,83,68,92,83,55,27,7,85,26,28,85,15,31,25,78,4,29,1,83,23,11,31,28,11,5,16,10,83,29,7,30,85,15,29,17,78,18,22,13,22,5,26,22,17,78,27,28,3,95,85,6,22,85,9,18,3,11,83,1,6,22,85,28,26,18,6,7,85,26,28,85,12,22,22,1,30,16,78,16,29,7,31,17,28,22,27,78,28,19,78,52,26,10,93,85,95,64,85,58,27,16,23,83,20,28,22,85,28,22,23,1,1,27,79,83,33,6,26,6,78,26,6,78,29,26,26,83,20,78,3,29,23,0,28,13,18,25,78,17,28,28,7,29,78,1,16,29,6,25,26,26,27,9,83,19,28,28,24,78,27,0,3,18,27,78,3,20,29,0,28,1,29,85,1,1,85,30,31,20,0,95,85,26,27,28,29,83,7,11,17,28,28,7,29,78,16,26,3,22,6,78,21,7,1,30,85,41,28,17,64,66,65,78,32,26,78,7,29,11,83,34,1,1,17,78,17,16,13,18,24,11,83,29,27,30,20,0,83,20,0,23,85,2,26,3,11,23,85,6,22,7,11,83,26,0,83,16,15,1,1,6,83,20,3,28,27,9,83,0,29,93,85,38,22,85,25,18,6,78,21,0,2,31,85,1,21,85,27,29,19,15,26,25,7,29,18,78,31,26,24,22,85,15,29,17,78,21,20,7,7,29,8,6,25,0,22,6,29,93,85,47,29,17,78,4,16,78,27,20,24,22,85,29,22,16,0,83,29,7,0,85,9,31,26,28,10,89,78,7,29,11,83,18,2,28,7,23,83,26,8,83,1,6,22,85,1,29,25,23,83,38,1,29,85,1,21,85,26,27,16,78,53,20,26,27,16,28"
- f = file.split(',')
- list1,list2,list3 = f[::3],f[1::3],f[2::3]
- d1,d2,d3 = [],[],[]
- for s1 in list1:
- d1.append(chr(int(s1) ^ ord(' ')))
- for s2 in list2:
- d2.append(chr(int(s2) ^ ord(' ')))
- for s3 in list3:
- d3.append(chr(int(s3) ^ ord(' ')))
- letter1 = max(d1,key=d1.count)
- letter2 = max(d2,key=d2.count)
- letter3 = max(d3,key=d3.count)
- key = letter1+letter2+letter3
- print 'key is :' + key
- def decodes(string, key):
- string = string.split(',')
- keys = key*(len(string)//len(key))+key[:len(string)%len(key)]
- output = []
- for i,s in enumerate(string):
- output.append(chr(int(s)^ord(keys[i])))
- return ''.join(output)
-
- print decodes(file,key)
复制代码
输出:
提示:
1. 可以用所有由3个小写字母组成的单词进行暴力破解。
2. 可以利用英语文章的字符特点进行匹配。
3. 其他词频分析的方法。 |