900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 加密算法——古典加密(凯撒密码C语言和Python)

加密算法——古典加密(凯撒密码C语言和Python)

时间:2021-01-12 02:18:12

相关推荐

加密算法——古典加密(凯撒密码C语言和Python)

过去的经验往往是走向未来的枷锁,因为在过时技术中投入的沉没成本会阻碍人们拥抱新技术。

—— chai

一.引子

从人类诞生出智慧,发明文字开始,人类就拥有了对信息进行加密的需求,随后的几千年里,各种信息加密方法不断产生、发展,在今天,我们把各种加密方法称之为加密算法。

英国作家阿瑟·柯南道尔在他风靡全球的侦探小说《福尔摩斯探案集》中记录了一个“跳舞的小人”的故事。

在根据原著改编的电视剧《神探夏洛克》第一季第二集中,夏洛克对凶手留下的符号(苏州码子)进行研究后得出每个小人对应着一个英文字母,进而通过频率分析的方法找出了凶手。

这种用替代或者置换移位的方法进行加密的方法被称为古典加密。

二.凯撒密码

凯撒密码是古罗马大帝凯撒在军事活动中创造的一种加密方法,用到的是古典密码中最简单的置换移位方法。其原理如下:

将字母依次向后移动三个位置,在上图中,用D代表A,E代表B......

A代表X,B代表Y,C代表Z

这个过程用代码是极其容易实现的(C语言加密):

#include<stdio.h> #include<string.h> int main(){printf("请输入明文:");char a[1000];gets(a);//输入明文int n;printf("请输入移位几位数:");scanf("%d",&n);//输入移动位数 while(n>26){n-=26;} //移动位数不能大于26,取余数 int len=strlen(a); //获取明文位数 for(int i=0;i<len;i++){if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){if(a[i]>='a'&&a[i]<='z'){if(a[i]+n>'z') a[i]=a[i]+(n-26);else a[i]+=n;}if(a[i]>='A'&&a[i]<='Z'){if(a[i]+n>'Z') a[i]=a[i]+(n-26);else a[i]+=n;}}}//用if语句来对大小写进行判定printf("密文是:"); puts(a); //输出密文 }

解密也同样简单,只需要将加密过程倒过来(C语言):

#include<stdio.h>#include<string.h> int main(){printf("请输入密文:");char a[1000];gets(a); //输入密文 int n;printf("请输入移位几位数:");scanf("%d",&n);//输入移动位数 while(n>26){n-=26;} //移动位数不能大于26,取余数 intlen=strlen(a);//获取密文位数n=26-n;//只改了这一处,你发现了吗for(int i=0;i<len;i++){if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){if(a[i]>='a'&&a[i]<='z'){if(a[i]+n>'z') a[i]=a[i]+(n-26);else a[i]+=n;}if(a[i]>='A'&&a[i]<='Z'){if(a[i]+n>'Z') a[i]=a[i]+(n-26);else a[i]+=n;}}}//用if语句来对大小写进行判定printf("明文是:"); puts(a);//输出明文}

很显然,加解密可以放在一段代码里,上面的代码还是过于简陋了,对于输入数字和符号的情况也可以用if语句来进行判断,但不管怎么样,这是一种可行的方案。

对于Python来说代码短得多(加密):

def kaisa(m): #加密函数if m==" ":return ' 'elif 97<=ord(m)<123-key or 65<=ord(m)<91-key: #位移值不超过最后一个z字母m=chr(ord(m)+key)return melif ord(m)>=123-key or 91-key<=ord(m)<91:m=chr(ord(m)+key-26)return mout=''#求解算法while 1:plaintext=input('请输入明文:')if plaintext=='退出':breakkey=eval(input('请输入位移值:'))for i in list(map(kaisa,plaintext)):out+=iprint('加密结果为:',out)

三.现状

凯撒密码在现在完全可以暴力破解,而在古代,人们发现英文中e和t使用的最多,可以用概率学对凯撒密码进行破解。

一直到二战,德国的恩格玛机(很多影视作品里面出现的密码机)将传统机械学,社会学,心理学与古典加密相结合,成为古典加密的巅峰。我之所以花时间写下这篇文章,不仅仅是因为我自己本身是信息安全这个专业的学生,也因为暑假时我看过的下面的ele实验室的这个视频:

/video/BV1DS4y1R7hM/spm_id_from=333.788.recommend_more_video.-1&vd_source=c09e4bdc6c606829f624e66481a1f73d

现在的超级计算机破解恩格码机轻而易举。但是在那个时代,暴力破解恩格码机几乎是不可能的。最后,是天才图灵找到了破解的方法。

四.总结

尽管是记录自己学习的经历,也想把文章写得有趣一些。后面会更新对称加密(AES)和非对称加密(RSA)。在这之前,可能会先把病毒写完。我的Python不是很好,还在学习阶段,尽量都能够用Python写出来吧。新生要开学了,我也要补考,还有最近实验室也很忙。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。