凯撒密码(Caesar's code)

简介

凯撒密码(Caesar's code)作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。


凯撒密码(Caesar's code)_第1张图片

ASCII表

http://www.asciima.com/ascii/12.html

凯撒密码(Caesar's code)_第2张图片

实现凯撒密码算法核心在下面
加密

C=E(p)=(p+3) mod 26 
C=E(p)=(p+k) mod 26 

假设p为需要加密的字母,位数3就是加密解密的密钥,可以参照上面的图表
解密

p=D(C)=(C-k) mod 26

算法实现

先设一个对照表,然后用两个函数实现加密 解密,加密函数传入需要加密的明文位数,解密函数传入需要解密的密文位数

letter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ';

def Encrypt(plaintext,key):
    ciphertext = ''
    for i in plaintext:
        if i.isalpha():
            if i.isupper():
                ciphertext += letter_list[(ord(i)-65+key)%26]
            else:
                ciphertext += letter_list[(ord(i)-97+key)%26]
        else:
            ciphertext += i
    return ciphertext

def Decrypt(ciphertext,key):
    plaintext=''
    for i in ciphertext: #遍历明文
        if i.isalpha(): #判断是否为字母
            if i.isupper(): 
                #明文是否为字母,如果是,判断大小写,分别用ASCII进行加密
                plaintext += letter_list[(ord(i)-65+key)%26]
            else:
                #如果是小写,需要转成小写,因为letter_list中都是大写
                plaintext += letter_list[(ord(i)-97+key)%26]
        else:
            #如果不为字母,直接添加到密文字符里
            plaintext += i
    return ciphertext

你可能感兴趣的:(凯撒密码(Caesar's code))