python caesar密码的构建代码

时间:2013-10-02 13:04:50

标签: python dictionary encryption

所以我应该建立一个编码器,用给定的移位值来移动字母的值。 我制作了2个词典,1个用于小写,1个用于大写字母。

这是它应该做的: “返回一个可以将Caesar密码应用于字母的字典。         密码由移位值定义。忽略非字母字符         比如标点符号和数字。“

这是一个例子:

示例:

>>> build_coder(3)
{' ': 'c', 'A': 'D', 'C': 'F', 'B': 'E', 'E': 'H', 'D': 'G', 'G': 'J',
'F': 'I', 'I': 'L', 'H': 'K', 'K': 'N', 'J': 'M', 'M': 'P', 'L': 'O',
'O': 'R', 'N': 'Q', 'Q': 'T', 'P': 'S', 'S': 'V', 'R': 'U', 'U': 'X',
'T': 'W', 'W': 'Z', 'V': 'Y', 'Y': 'A', 'X': ' ', 'Z': 'B', 'a': 'd',
'c': 'f', 'b': 'e', 'e': 'h', 'd': 'g', 'g': 'j', 'f': 'i', 'i': 'l',
'h': 'k', 'k': 'n', 'j': 'm', 'm': 'p', 'l': 'o', 'o': 'r', 'n': 'q',
'q': 't', 'p': 's', 's': 'v', 'r': 'u', 'u': 'x', 't': 'w', 'w': 'z',
'v': 'y', 'y': 'a', 'x': ' ', 'z': 'b'}
(The order of the key-value pairs may be different.)
"""

从2个不完整的小写和大写字母词典开始:

capitals = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' '}
lower = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '}            

1 个答案:

答案 0 :(得分:0)

您不必使用词典...使用string模块有一种更简单的方法:

from string import printable, maketrans

def caesar(string, key):

    shifted_alphabet = printable[key:] + printable[:key]
    table = maketrans(printable, shifted_alphabet)
    return string.translate(table)

string = raw_input("Enter something> ") #input for python 3
while 1:
    try:
        key = int(raw_input("Enter key (0-25): "))
    except:
        print "Key should be integer"
    else:
        if not (0 <= key <= 25):
            print "Key should 0-25, %s received"%key
            continue
        break
print caesar(string, key)
print caesar(string, len(printable)-key)