Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 维格纳密码的麻烦_Python_Vigenere - Fatal编程技术网

Python 维格纳密码的麻烦

Python 维格纳密码的麻烦,python,vigenere,Python,Vigenere,我需要用关键字加密,有什么帮助吗? p、 它需要像上面的代码一样基本。 它适用于GCSE(英国) 如果它需要一些命令,那么你能告诉我它们是做什么的吗:)这样我就可以在任务中解释:)首先,问题中的失败: m:中a的所有代码都是不必要的,这不属于您的问题,您真正的问题是使用vigenere密码算法加密一个字,这可以用两行代码代替: print ("") print ("Welcome to Vigenere cipher!") print ("") print ("This program will

我需要用关键字加密,有什么帮助吗? p、 它需要像上面的代码一样基本。 它适用于GCSE(英国)
如果它需要一些命令,那么你能告诉我它们是做什么的吗:)这样我就可以在任务中解释:)

首先,问题中的失败:

m:中a的所有代码都是不必要的,这不属于您的问题,您真正的问题是使用vigenere密码算法加密一个字,这可以用两行代码代替:

print ("")
print ("Welcome to Vigenere cipher!")
print ("")
print ("This program will encrypt then offer you a decryption of your message.")
print ("")
print ("Start this off with inputting your message you would like to encrypt.")
m = input("")
print ("")
print ("Now enter your keyword you would like to use. (it must be (" +str(len(m)),"or less letters.))")
k = input("")

if len(k) > len(m):
    print ("")
    print ("sorry this is an invaild keyword")
    print ("Please re-enter your keyword.")
    k = input("")
else:
    print ("Your keyword is great. Lets keep going")

print ("")

print ("Is this correct?")
print ("")

print("-------\n"
  "Message:  ",m,"\n"
  "Key:      ",k,
  "\n-------")
print ("")

print ("yes or no")
correct = input ("")
if 'yes'.startswith(correct.lower()):
print("Great! Lets keep going.")
else:
    print ("You previously put: " +str(m), " as your message.")
    print ("Please re-enter the keyword you wish to use. (it must be (" +str(len(m)),"or less letters.))")
    k = input("")
encrypted = ("")
print ("")

for a in m:
    print ("The message letters are")
    encrypt2 = ord(a)

    for b in k:
        print ("The keyword letters are")
        encrypt = ord(b)
        encrypt3 = (encrypt) + (encrypt2)
        encrpyted = chr(encrypt3)
        print (chr(encrypt3))
或者如果你愿意的话

message = "ATTACKATDAWN"
key_adj = "LEMONLEMONLE"
注意:我重命名了变量,以便帮助您的人更好地理解

由于输入现在不是问题,我可以解决问题

其次,算法失败:

最明显的错误是使用嵌套的
for
,越多越好,这会使您的解决方案复杂化,对于此问题,您只需要一个
for

message = "ATTACKATDAWN"
key = "LEMON"
#key_adj and message equal length
key_adj = key + key*((len(message)/len(key))-1) + key[:len(message)%len(key)]
#key_adj is LEMONLEMONLE
第二个失败,是密码方程式。。。。例如,第一个字母:

for a in m:
    for b in k:
        ....
你会得到:

#i use zip function, match letter message with letter key
# (A,L) (T,E) (T,M) (A,O) (C,N) (K,L) etc.
encrypt = ""
for letter_msg, letter_key in zip(message, key_adj):
    code_letter_msg = ord(letter_msg)-ord('A')
    code_letter_key = ord(letter_key)-ord('A')
    encrypt += chr((code_letter_msg+code_letter_key) % 26 + ord('A'))

print (encrypt)
解释方程:

LXFOPVEFRNHR
字母-65=0 letter_key=“L”->ord(“L”)-65=11 ((0+11)%26+65)->chr(76)=“L” 字母-65=19 字母E“->ord(“E”)-65=4 ((19+4)%26+65)->chr(88)=“X”
可能缺少一些代码。“但这一切都应该结束,我们不是来帮你在功课上作弊的,”乔治泰尔德说。请阅读此代码有什么问题?除此之外,如果“是”,则需要重新查看
。从
语句开始(打印需要缩进,并且该代码不是检查“是”的最佳逻辑)。或者你只是需要帮助理解加密方法的逻辑吗?对于第二部分(vigenere密码),这个问题的一个非常简单的例子(有解释)可以在它的加密中找到,其余的我想让它看起来更好一点,如果你明白我的意思。不,不,我想要它,这样用户就可以输入消息和密钥,然后它会通过关键字发出加密消息。我不想编辑任何来自k=input(“”@GeorgeTaylder的内容是的,我理解。。。。但是输入不是你的问题,这是多个原因之一,你得到了问题的负面观点
LXFOPVEFRNHR
letter_menssage = "A" -> ord("A")-65 = 0 letter_key = "L" -> ord("L")-65 = 11 ((0+11)%26 + 65)-> chr(76) = "L" letter_menssage = "T" -> ord("A")-65 = 19 letter_key = "E" -> ord("E")-65 = 4 ((19+4)%26 + 65)-> chr(88) = "X"