仿射密码编码实验

发布时间 2023-05-27 18:58:39作者: 魔法少女小胖

【实验目的】

熟练掌握多表古典密码仿射密码加密和解密算法原理及实现和应用。

【知识点】

仿射密码

【实验原理】

单码加密法的另一种形式称为仿射加密法(affinecipher)。在仿射加密法中,字母表的字母被赋予一个数字,例如a=0,b=1,c=2...z=25。仿射加密法的密钥为0-25之间的数字对。仿射密码的加密算法就是一个线性变换,即对任意的明文字符x,对应的密文字符c,其中,a,b∈Z26,且要求gcd(a,26)=1,函数e(x)称为仿射加密函数。加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法的数学表达形式是:C=Ek(m)=(k1m+k2)modnM=Dk(c)=k3(c-k2)modn(其中(k3×k1)mod26=1)仿射密码具有可逆性的条件是gcd(k1,n)=1,当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26=312。

【软件工具】

操作系统:Centos7其他:Python3

【实验目标】

查看仿射密码的源码,执行程序,并使用仿射密码进行加密和解密,分析安全性。

【实验步骤】

查看仿射密码的源码,加密过程代码在系统中打开文档进行代码的查看,在Linux系统命令行中输入vim/root/cryptography/Affine(1).py,系统显示出来代码。

image

查看完毕后,输入:q退出查看。之后对这段代码进行验证,输入以下代码查看到目录下有个".py"文件。

image

首先执行Affine(1).py来验证加密过程,输入以下命令python3Affine(1).py。

image

选择要输入被加密的明文,输入明文ouhnkdawfe。输入密文:exit推出循环。执行Affine(2).py,命令为python3Affine(2).py。输入明文CQDRKLEMHW。

image
image

安全性分析仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26=312。虽然相比于乘法密码在秘钥空间上具有了很大进步,但仍然存在不少漏洞,并且较容易被有心之人用暴力破解掉,有兴趣的同学可以试着自己暴力破解一下这种密码方式来进一步加深对仿射密码的理解。