【问题标题】:Python: How to encrypt a string of character length 'x' by an 8 digit keyPython:如何通过 8 位密钥加密长度为“x”的字符串
【发布时间】:2017-03-11 19:05:13
【问题描述】:

Python:如何使用 8 位密钥加密长度为 n 的字符串。

到目前为止,我的代码如下 - 但是它只会加密字符串的长度,直到密钥(或密钥长度)中的第 8 位。我需要在密钥结束时重置密钥并继续其余的字符串。真的卡在这个了。任何指导或帮助将不胜感激。

def code_char(c,key):
    c = ord(c)
    if c >= 65 and c <= 90:
        c = c + key
        if c <= 90:
            return chr(c)              
        while c > 90:
            c = c - 26
            return chr(c)
    elif c >= 97 and c <= 122:
        c = c + key
        if c <= 122:
            return chr(c)                   
        while c > 122:
            c = c - 26
            return chr(c)

def code_block(word, key):
    newWord = ""
    for char, num in zip(word, key):
        newWord = newWord + code_char(char, int(num))        
        return newWord 

print(code_block('abcdefghijklmn','111111111'))

感谢您的帮助 - 应该说明我不允许为此使用任何内置函数。

【问题讨论】:

  • 使用while 而不是else 是一个奇怪的选择。此外,即使在此处使用 if 而不是使用模运算也会使代码不必要地冗长。
  • 感谢您的提醒。这会是以后的问题还是只是不必要的?
  • 当你真正的意思是 else 时使用一段时间是复杂的,迟早是复杂的代码是一个问题。另外,您 正在 在这里使用模运算,因此您不妨使用 % 来明确说明。

标签: python


【解决方案1】:

您可以在开始循环之前使code_blockkey 的长度与word 的长度相匹配。使用来自Repeat string to certain length的非常好的解决方案

你可以这样写:

def code_block(word, key):
    newWord = ""
    work_key = (key * ((len(word)/len(key))+1))[:len(word)]
    for char, num in zip(word, work_key):
        newWord = newWord + code_char(char, int(num))        
    return newWord

在此处查看实际操作:https://eval.in/752994

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多