Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 - Fatal编程技术网

替换密码Python

替换密码Python,python,Python,我必须制作一个替换密码程序,首先创建一个随机密钥,然后使用该密钥对一些用户输入(明文)进行解密/加密。该问题的约束条件如下: encryptMsg(纯文本、密钥、字母表) 将明文字符串、字母表字符串和密钥字符串作为参数,并返回 加密的密码字符串。注意,在此函数中,必须首先将纯文本字符串转换为 小写并删除字母表字符串中未出现的任何标点/字符 解密消息(密文、密钥、字母表) 将获取密文字符串、字母表字符串和密钥字符串并返回明文 绳子 makeKey(字母表) 通过随机洗牌字母表字符串中的字符,生成并

我必须制作一个替换密码程序,首先创建一个随机密钥,然后使用该密钥对一些用户输入(明文)进行解密/加密。该问题的约束条件如下:

  • encryptMsg(纯文本、密钥、字母表) 将明文字符串、字母表字符串和密钥字符串作为参数,并返回 加密的密码字符串。注意,在此函数中,必须首先将纯文本字符串转换为 小写并删除字母表字符串中未出现的任何标点/字符

  • 解密消息(密文、密钥、字母表) 将获取密文字符串、字母表字符串和密钥字符串并返回明文 绳子

  • 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函数有问题,因为它不工作。我需要一些关于如何启动其他功能的帮助。我们不能使用字典,只能使用列表方法。如果您能在我的任务中为我提供帮助或建议,我们将不胜感激。谢谢大家

    更新:示例输出如下所示:

    字母表:“abcdefghijklmnopqrstuvxyz.,!”

    钥匙:“nu.t!iyvxqfl,bcjrodhkaew spzgm'

    输入纯文本:嘿,这真的很有趣

    密文:“v!zmhvxdmxmo!nll mikbg'


    解密文本:“嘿,这真的很有趣!”

    以下原始答案

    请向我们展示一些示例输入和输出。根据您的代码,我可以得出以下结果-
    随机。shuffle
    将所有内容都随机移动并返回
    ,将makeKey更改为:

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

    有关在加密/解密中不使用
    dict
    s的方法,请参阅以下内容:

    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))
    
    印刷品:

    编辑

    经过一些间距问题和实验,我提出了一个相当简单的解决方案:

    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))
    
    这张照片是:


    以下原始答案

    请向我们展示一些示例输入和输出。根据您的代码,我可以得出以下结果-
    随机。shuffle
    将所有内容都随机移动并返回
    ,将makeKey更改为:

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

    有关在加密/解密中不使用
    dict
    s的方法,请参阅以下内容:

    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))
    
    印刷品:

    编辑

    经过一些间距问题和实验,我提出了一个相当简单的解决方案:

    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))
    
    这张照片是:



    你怎么知道它不起作用,你叫它了吗?另外,如果您想将其作为字符串取回,请使用
    ''.join(alphabet)
    而不是
    str(alphabet)
    您打算如何解密?尚未获得。这就是我的问题所在。我需要一些指导,我该怎么做#NoviceProbs@Joe第二种方法对你有效吗?你怎么知道它不起作用,你叫它了吗?另外,如果您想将其作为字符串取回,请使用
    ''.join(alphabet)
    而不是
    str(alphabet)
    您打算如何解密?尚未获得。这就是我的问题所在。我需要一些指导,我该怎么做#NoviceProbs@Joe第二种方法对您有效吗?只是在上面添加了一个示例输出。我也很感谢你对其他函数的帮助。非常感谢。除了使用dict(zip(…)还有其他选择吗。我们不允许使用字典。这也是我在网上找到的方法。这肯定是有效的,但遗憾的是,我们的教授关心的是一点暴力。有关不使用
    dict
    s@Reti43,有道理,我刚离开办公桌,一回到电脑就可以了;在此期间,请随意编辑:)@Reti43编辑了我的答案,包括您的反馈,谢谢!刚刚在上面添加了一个示例输出。我也很感谢你对其他函数的帮助。非常感谢。除了使用dict(zip(…)还有其他选择吗。我们不允许使用字典。这也是我在网上找到的方法。这肯定是有效的,但遗憾的是,我们的教授关心的是一点暴力。有关不使用
    dict
    s@Reti43,有道理,我刚离开办公桌,一回到电脑就可以了;在此期间,请随意编辑:)@Reti43编辑了我的答案,包括您的反馈,谢谢!