密码学编程——凯撒加密

凯撒加密原理:

         凯撒加密法,这种加密法曾在两千年前被凯撒大帝用过,主要用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 8位,则 字母 A 将变为Q,字母 B 将变为R,…,字母 X 变成 N,字母 Y 则变为 O,字母 Z 变为 P。其中右移8位的,8就是加密密钥;

如何用程序实现:

         把字母表的字母从A到Z写下来,在每个字母下面写下数字0到25。在A下面写0, B 下面写1,如此类推,直到在Z下面写25 (字母表里有26个字母,但我们的数字最多只到 25,因为我们从0而不是1开始的)。

密码学编程——凯撒加密_第1张图片

        现在,如果要加密,我们找到希望加密的字母下面的数字,然后把密钥数字加上去。这 个和就是加密的字母下面的数字。如,我们使用密钥13加密“Hello. How are you?”。首先, 我们找到H下面的数字,是7。接着,我们把密钥加上这个数字,7+13=20。数字20在字 母U下面,这意味着字母H加密成字母U。如果要加密字母E,我们把E下面的4加上13, 得到17。17上面的字母是R,因此E加密成R。如此类推。 直到我们遇上字母O时这个方法才会岀问题。O下面的数字是14,当把14加上13时, 我们得到27。但我们的数字列表最多只到25。如果字母的数字和密钥之和超过26,我们应 该减去26, 27-26得到1。数字1上面的字母是B。于是,当使用密钥13时,字母O加密 成字母B。 个接 个地,我们可以把“HELLO. HOW ARE YOU?”里的字母加密成“URYYB. UBJ NER LBH?”。 

代码:


message = 'This is my secret message.'

#the encrypted/decrypted key
key = 8

#set to 'encrypt' or 'decrypted'
mode = 'encrypt'

#Encryption Strength 'H' or 'L'
strengthen = 'L'

if strengthen == 'L':
    LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
else:
    LETTERS = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'

translated = ''

message = message.upper()

for symbol in message:
    if symbol in LETTERS:

        num = LETTERS.find(symbol)
        if mode == 'encrypt':
            num = num + key
        elif mode == 'decrypt':
            num = num - key


        if num >= len(LETTERS):
            num = num - len(LETTERS)
        elif num < 0:
            num = num + len(LETTERS)


        translated = translated + LETTERS[num]

    else:

        translated = translated + symbol
print(translated)

 

你可能感兴趣的:(密码学)