一.简介

在密码学中中,恺撒密码(英语:Caesar cipher),或称恺撒加密恺撒变换变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

二.如何用python简单的实现凯撒加密和解密

1首先要获得两个分别包含a-z和A-Z的数组,方便接下来对字母进行偏移变化的实现

#首先先把A-Z放入upper_list中
import string
upper = string.ascii_uppercase
upper_list = []
for c in upper:
    upper_list.append(c)

#首先先把a-z放入个low_list中
lower = string.ascii_lowercase
lower_list = []
for c in lower:
    lower_list.append(c)

2先假设只对所有小写字母进行偏移加密,假设偏移量为5

list = []
for c in lower_list:
    offset = 5
    #偏移量等于五
    index = (lower_list.index(c)+5) % len(lower_list)
    print(lower_list[index],end=" ")

#就得到了 如下的列表
#[f g h i j k l m n o p q r s t u v w x y z a b c d e] 

注意

len(lower_list)作用在于:index范围会在(0+5)到(25+5)之间,超过了数组下标,需要对长度进行余

3假设list1 就是lower_list加密后结果,然后对list1进行解密

list1 =['f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e']

for c in list1:
    offset = 5
    index = list1.index(c)-offset
    print(list1[index])

注意

左移时不需要取余,在python中即使列表中下表是负号也是可以的,比如数组最后一个下表可以用-1表示

4最后完整下代码,即加密解密的字母中有大小写的情况下

import string
upper_list = string.ascii_uppercase
lower_list = string.ascii_lowercase


def encryption(source):
    offset = 5
    str = ''
    #定义一个目标字符串
    for c in source:
        if c in lower_list:
            index = (lower_list.index(c)+offset) % len(lower_list)
            str += lower_list[index]
        elif c in upper_list:
            index = (upper_list.index(c)+offset) % len(lower_list)
            str += upper_list[index]
    return str

def cryption(result):
    offset = 5
    str1 = ''
    #定义一个目标字符串
    for c in result:
        if c in lower_list:
            index = lower_list.index(c)-offset
            str1 += lower_list[index]
        elif c in upper_list:
            index = upper_list.index(c)-offset
            str1 += upper_list[index]
    return str1


if __name__ == '__main__':
    source ="JiaYou"
    result = encryption(source)
    result1 = cryption(result)
    print(result)
    print(result1)
#分别输出OnfDtz和JiaYou

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐