2016-03-23 69 views
-1

我必须制作替代密码程序,我首先创建一个随机密钥,然后使用此密钥对某些用户输入(明文)进行解密/加密。替代密码Python

  1. encryptMsg(明文,键,字母表) 注意到明文字符串,一个字母串和秘密密钥的字符串作为参数,并返回 加密密码字符串:如下的问题的约束。请注意,在此功能中,您必须先将明文字符串转换为全部小写字母,并删除字母串中未出现的任何标点/字符!

  2. decryptMsg(密文,密钥,字母) 将采取密文形式的字母列和密钥字符串,返回明文 字符串。

  3. makeKey(字母) 通过随机混洗字母串 参数中的字符来生成并返回密钥字符串。提示:这涉及转动字符串转换成列表,使用random.shuffle() 方法,然后打开列表回字符串

这是我有:

import random 
alphabet = "'abcdefghijklmnopqrstuvwxyz.,!'" 

def makeKey(alphabet): 
    alphabet= list(alphabet) 
    key= random.shuffle(alphabet) 
    alphabet= str(alphabet) 
    return key 


def encrypt(plaintext, key, alphabet): 
    """Encrypt the string and return the ciphertext""" 
    return ''.join(key[l] for l in plaintext) 
print (alphabet) 

我知道我使用makeKey函数做错了,因为它不起作用。我需要一些关于如何启动其他功能的帮助。我们不能使用字典,只能列出方法。任何帮助或只是在我的任务中启动我的建议将不胜感激。多谢你们!

UPDATE:将样品输出如下:

字母:“ABCDEFGHIJKLMNOPQRSTUVWXYZ,! “

重点: '!nu.t iyvxqfl,bcjrodhkaew spzgm'

输入明文:嘿,这真的很有趣!

密文:'v! zmhvxdmxdmo!nll mikbg'

解密文字:'嘿,这真的很有趣!

+0

怎么办你知道这行不通,你有没有打过电话?另外,如果你想把它作为一个字符串取回,使用'''.join(alphabet)'而不是'str(字母)' – Bahrom

+0

你打算如何解密? –

+0

还没有得到它。这就是我的问题。我需要一些指导,我该如何解决这个问题? #NoviceProbs – Joe

回答

3

原来的答复如下

请告诉我们一个例子一些样品的输入和输出。基于您的代码,我可以想出以下 - random.shuffle到位洗牌的一切,并返回None,你makeKey更改为:

def makeKey(alphabet): 
    alphabet = list(alphabet) 
    random.shuffle(alphabet) 
    return ''.join(alphabet) 

编辑2

对于一个方法,而无需使用dict小号在加密/解密,见下文:

import random 

alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' # Note the space at the end, which I kept missing. 
# You could generate the key below using makeKey (i.e. key=makeKey(alphabet)) 
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm' 
plaintext = "Hey, this is really fun!" 
# v! zmhvxdmxdmo!nll mikbg 


def makeKey(alphabet): 
    alphabet = list(alphabet) 
    random.shuffle(alphabet) 
    return ''.join(alphabet) 

def encrypt(plaintext, key, alphabet): 
    keyIndices = [alphabet.index(k.lower()) for k in plaintext] 
    return ''.join(key[keyIndex] for keyIndex in keyIndices) 

def decrypt(cipher, key, alphabet): 
    keyIndices = [key.index(k) for k in cipher] 
    return ''.join(alphabet[keyIndex] for keyIndex in keyIndices) 

cipher = encrypt(plaintext, key, alphabet) 

print(plaintext) 
print(cipher) 
print(decrypt(cipher, key, alphabet)) 

打印

Hey, this is really fun! 
v! zmhvxdmxdmo!nll mikbg 
hey, this is really fun! 

编辑

经过一番间距问题和实验,我想出了这个简单的解决方案:

import random 

alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' 
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm' 
plaintext = "Hey, this is really fun!" 


def makeKey(alphabet): 
    alphabet = list(alphabet) 
    random.shuffle(alphabet) 
    return ''.join(alphabet) 

def encrypt(plaintext, key, alphabet): 
    keyMap = dict(zip(alphabet, key)) 
    return ''.join(keyMap.get(c.lower(), c) for c in plaintext) 

def decrypt(cipher, key, alphabet): 
    keyMap = dict(zip(key, alphabet)) 
    return ''.join(keyMap.get(c.lower(), c) for c in cipher) 

cipher = encrypt(plaintext, key, alphabet) 

print(plaintext) 
print(cipher) 
print(decrypt(cipher, key, alphabet)) 

这将打印

Hey, this is really fun! 
v! zmhvxdmxdmo!nll mikbg 
hey, this is really fun! 
+0

刚刚在上面添加了一个示例输出。我会很感激与其他funcitons一些帮助。谢谢! – Joe

+1

好的,编辑,给我几个... – Bahrom

+0

慢慢来! – Joe