我几天来一直在研究这段代码,但没有结果。函数autodecrypt
采用由encrypt
加上的字符串,其域A-Z和a-z中的字符由数字offset
更改。因此,在ASCII代码中,'A'将为65,如果offset
= 7,则'A'现为'H'(其代码#为72)。将尝试从0-95的偏移值。如果85%或更多的单词出现在名为dictionary.txt
的txt文件中,则会检查解密,该文件基本上包含一堆常用单词。这就是我的问题所在:如果我生成的字符串在txt文件中,则无法正确检查。
def autodecrypt(ciphertext):
text = list(ciphertext)
t = open ('dictionary.txt', 'r')
m = t.read()
diccond = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ' #initializing variables
ntext = []
ctext = ''
i = 0
offset = 0
check = 0
while offset <= 95: #cycling through 95 offset values
while i < len(text): #decrypting ciphertext with given offset value
r = ord(text[i])
if r - offset < 32:
s = chr(127 - (offset - (r - 32)))
else:
s = chr(r - offset)
ntext.append(s)
i+=1
stext = ''.join(ntext) #make decrypted list (ntext) into string, stext
for j in stext: #removing punctuation and store in new string, ctext
if j in diccond:
ctext += j
cltext = ctext.lower() #lowercasing ctext string
for k in (cltext.split(' ')): #checking if ctext, list version, is in txt file
if k in m:
check +=1
if check / len(ctext.split(' ')) >= 0.85: #checking if 85% or over of ctext string version in txt file
return stext
else: #else if there is not any fail and return cipher text (see below)
fail = 0
check = 0 #resetting all variables
ctext = ''
ntext=[]
i=0
offset +=1 #increasing offset
if fail == 0:
return ciphertext
如果没有85%或更多匹配,则返回原始加密字符串。
答案 0 :(得分:0)
假设这是Python 2.x(您需要更具体地标记!),问题似乎在这里:check / len(ctext.split(' '))
这是一个整数除法,0和1是唯一可能的结果(它可以如果每个单词都在文件中,则只有1)。要获得浮点结果,您需要在除法之前将至少一个操作数转换为float:float(check) / len(ctext.split(' '))
。