凯撒密码的python实现

密码(一)

导言

上一期,我们认识了著名的凯撒密码,也了解了其加密和解密原理,这一期,我们将利用python编程语言来实现凯撒密码的加密过程和解密过程。加密是指给出一段明文,通过程序返回对应的密文,而解密是指根据密文给出明文的过程。

预备知识

由于加密和解密需要处理编码问题和字符大小比较的问题,这里先介绍一下ASCII码。ASCII是一套将计算机符号转化为二进制数的有效编码方法,二进制又与十进制可通,转化后的数值能够比较大小,进行数学计算,标准ASCII 码使用7 位二进制数来表示所有的大写字母和小写字母,数字0到9、标点符号,以及美式英语中使用的特殊控制字符,常见ASCII码是有大小规则的,一般的

  • 数字要小于字母,,如"9"<"A"

  • 大写字母要小于小写字母,"A~Z"<"a~z"

  • 字母A比字母Z要小,并按A到Z顺序递增,如"A"<"Z"

  • 同个字母的大写字母比小写字母要小32。如"A"="a" -32

python中常见的处理ASCII码的函数有ord()chr()函数,ord() 函数是以一个字符(长度为1的字符串)作为参数,返回对应的十进制的ASCII 数值,而chr() 函数则是以0 - 256 的一个整数为参数,返回值是当前整数对应的ASCII字符,通过chr()和ord()联合起来使用,就能够灵活的对字符(串)进行转换和相关数学运算。

思路及完整代码

有了之前的编码知识,现在的任务是设计一套程序实现凯撒加密和解密。如果输入是明文,对其进行凯撒加密,如果输入是密文,对其进行凯撒解密,由于加密和解密互为逆过程,这里只讨论凯撒加密,且约定密钥为3。

凯撒密码的python实现_第1张图片

# -*- coding: utf-8 -*-
"""
Created on Sat Jan  4 14:59:08 2020
project name: Caesar cipher
@author: 帅帅de三叔
"""
PlainText=input("input PlainText:") #输入一段明文
PlainText_list=list(PlainText) #将明文拆成一个一个字符
n=len(PlainText) #计算输入明文总长度
CipherText=[] #用来存放凯撒加密后密文
for i in range(n): #对明文的每个字符循环
    if PlainText_list[i]==" ": #如果是空格
       CipherText.append(PlainText_list[i]) #追加
    elif  ord("A") <= ord(PlainText_list[i]) <= ord("X"): #大写字母
        #print(chr((ord(PlainText_list[i])+3))) #测试
        CipherText.append(chr((ord(PlainText_list[i])+3)))
    elif ord("a") <= ord(PlainText_list[i]) <= ord("x"): #小写字母
        #print(chr((ord(PlainText_list[i])+3))) #测试
        CipherText.append(chr((ord(PlainText_list[i])+3)))
    elif PlainText_list[i] in ["Y","Z"]: #大写末端情况
        #print(chr((ord(PlainText_list[i])-23))) #测试
        CipherText.append(chr((ord(PlainText_list[i])-23)))
    elif PlainText_list[i] in ["y","z"]: #小写末端情况
        #print(chr((ord(PlainText_list[i])-23))) #测试
        CipherText.append(chr((ord(PlainText_list[i])-23)))
print("".join(CipherText))              

代码解析

首先利用input()函数输入一段待加密的明文(字符串),然后利用 list()函数将其拆成一个一个单独的字符,对拆出来的单个字符进行判断分情况讨论进行加密,先判断一般情况,再对位于末端的特殊情况单独考虑,如同数学里面的分段函数,每次加密后的凯撒密码追加到CipherText列表里面去,最后利用join()函数拼接成一个字符串,即为原明文对应的密文,比如,我输入

I love you              

返回结果是

L oryh brx            

当然你可以赋予更多更深的内涵,我这里仅仅举一个例子罢了,想要发现更多有趣好玩的数学吗?赶紧加入我们吧。

参考文献

1,https://www.cnblogs.com/rick52o/p/7206890.html

2,https://baike.baidu.com/item/ASCII/309296?fr=aladdin

- - -The end- - - 


你可能喜欢

密码(一)

第九讲   RSA加密算法(一)

第十讲   RSA加密算法(二)

笛卡尔第十三封情书

月牙的面积

月牙定理(一)

月牙定理(二)

三行科创微信公众号欢迎投稿,提供线索

稿件聚焦数学、逻辑,数学工程,数学文化等领域

一经采用,我们将奉上酬劳

投稿邮箱:[email protected]

商务合作:17521754388

加入三行科创交流群,添加微信:melite01(备注 交流群)

你可能感兴趣的:(凯撒密码的python实现)