凯撒密码(Caesar's code)

简介

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


ASCII表

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


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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容