实验报告书-Hill密码体系

合集下载

hill密码算法

hill密码算法

hill密码算法摘要:1.Hill 密码的概述2.Hill 密码的加密过程3.Hill 密码的解密过程4.Hill 密码的优缺点5.Hill 密码的应用案例正文:1.Hill 密码的概述Hill 密码是一种基于替换的密码算法,由英国密码学家George Hill 在1929 年提出。

它是一种对称密钥密码,意味着加密和解密所使用的密钥是相同的。

Hill 密码的主要特点是加密过程中,明文中的每个字符都会被替换为按照一定规则重新排列的字符。

2.Hill 密码的加密过程在加密过程中,Hill 密码采用了以下步骤:a.选择一个与明文长度相同的密钥。

b.将明文分成长度为n 的块,其中n 是密钥的长度。

c.对每个块中的字符进行重新排序,根据密钥中的对应字符进行替换。

具体来说,如果密钥中的第i 个字符是a,那么明文中的第i 个字符就用a 替换;如果密钥中的第i 个字符是b,那么明文中的第i 个字符就用b 替换,以此类推。

d.将加密后的块按照顺序拼接起来,得到加密后的密文。

3.Hill 密码的解密过程Hill 密码的解密过程与加密过程正好相反。

首先,将密文分成长度为n 的块,然后根据密钥中的字符对每个块中的字符进行还原。

最后,将还原后的块按照顺序拼接起来,得到解密后的明文。

4.Hill 密码的优缺点Hill 密码的优点是加密过程简单,易于实现。

然而,它也存在一些缺点:a.密钥长度决定了加密效果。

如果密钥长度较短,那么加密效果会受到较大影响。

b.容易受到字频分析的攻击。

因为Hill 密码的加密过程是基于字符替换,所以如果攻击者知道明文中字符的出现频率,就可以根据这些信息推测出密钥,从而破解密码。

5.Hill 密码的应用案例尽管Hill 密码存在一些缺点,但它仍然在某些场景下被使用。

例如,在早期的计算机网络中,由于计算能力有限,Hill 密码作为一种简单易行的加密方法被广泛应用。

实验6Hill密码

实验6Hill密码

电子信息工程系实验报告成绩:课程名称: MATLAB语言指导教师(签名):实验项目名称:实验6 Hill密码实验时间:2013-4-201. 实验目的了解加密和解密原理,掌握模运算下的矩阵运算以及数字与字符串之间的转换。

2.实验环境硬件:PC机,基本配置CPU PII以上,内存4G以上;软件:Matlab 版本7.13.实验原理保密通信具有悠久的历史,现在更是被广泛应用于军事、经济、商业等各行各业。

在保密通信中奖原信息称为明码,加密后的信息称为密码。

如果不知道加密方法,一般人无法知道明文内容,这样就起到了保密的作用。

加密和解密的过程可以抽象为一个数学模型。

4.实验内容及结果分析4.1 根据移位加密法编写一段加密和解密的程序,并将所编程序应用于明文“HELLOWORLD” ,密钥取3.加密程序代码如下所示:n=input('please input n:');x=input('please input x:');x1=double(x);x2=x1+n;if x2>90x2=65+x2-91;endy=char(x2)当n=3,x=’HELLOWORLD’时,y= ‘ KHOORZRUOG’解密程序代码如下所示:n=input('please input n:');x=input('please input x:');x1=double(x);x2=x1-n;if x2<65x2=90-(64-x2);endy=char(x2)当n=3,x=’ KHOORZRUOG’时,y= ‘HELLOWORLD’4.2 甲方收到与之有秘密通信往来的另一方的一个密文信息,密文内容为:JCFOAMOOLABUOHFAXOIKVLYWQSTPKPYABHROARXAMO按照甲方与乙方的约定,他们之间的密文通信采用Hill2密码,密钥为矩阵, 26个字母的表值如正文所示,问这段密文的原始明文是什么?解密程序代码如下所示:clear;clc;close all;A=[1 2;0 3];a=mod(det(A),26);for k=0:25if rem(k*a,26)==1b=k;break;endendB=mod(b*[A(2,2),-A(1,2);-A(2,1),A(1,1)],26);x='JCFOAMOOLABUOHFAXOIKVLYWQSTPKPYABHROARXAMO'x2=double(x);x3=(x2-64).*(x2>64 & x2<90)+(x2-90).*(x2==90);x4=reshape(x3,2,length(x3)/2);x5=mod(B*x4,26);x6=x5(:)';x7=(x6+64).*(x6<26 & x6>0)+(x6+90).*(x6==0);y=char(x7)运行可得y=’HAVEAMEETINGATNINESUNDAYMORNINGINTHEOFFICE’。

实验报告

实验报告

(四)实验结果
a v a d a k e d a v r a
中文意思:阿瓦达索命咒《哈利波特》
(五)实验过程
一. 密钥矩阵的获取
通过一个列向量通过密钥矩阵可得到的列向量这一条件,将密钥矩阵求出。这一条件可以 看作是一个四元一次方程组,但只有两个等式,所以需要挖掘隐藏条件。隐藏条件即为对密钥 矩阵的约束,首先是规定密钥矩阵中的数字只能为 0 至 9 的数字,这可以对矩阵中的四个元素 进行约束;其次,这个行列式的值得与 26 互质,即行列式的值对 2 和 13 取余值不为 0;最后 将四元二次方程组作为约束条件对矩阵进行约束。通过三步约束求得的矩阵已在极小的范围内 了,图为求得矩阵的结果。
三.
ห้องสมุดไป่ตู้
将所得数组转化为字母输出
得到数字之后,通过计算机中 AsicⅡ码的数字与字母的关系,将所得数组转化为字 母输出,得到最终结果。如图所示
Hill2 密码的破译
(一)实验背景
Hill 密码是一种简单的加密手段。 优点是:可以实现同一个字母在不同的上下文中,对应密文中不同的字母。 缺点是:加密前明文是几个字母,加密后还是几个字母。容易被穷举。 下面简要介绍一下加密过程: 1、要将 26 个字母,编号,例如 a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13 n:14,o:15,p:16,q:17,r:18,s:19,t:20,u:21,v:22, w:23,x:24, y:25,z:0 2、确定密钥,在这里其实就是加密矩阵,Hill2 密码对应的是一个二阶矩阵,Hill n 密码对 应的就是一个 N 阶矩阵了,例如,想要表达的语句是 woshigetiancai。 (1) 将字母两两分组 wo ,sh, ig, et, ia, nc, ai。 这里刚好是偶数个字母,如果是奇数个,就重复一次,最后一个字母,凑成偶数。 (2) 查询字母标号表,将分好组的字母,写成向量形式,其实就是写成一个列向量,如 w 对应 23,o 对应 15,写成向量[23;15}以此类推,得到 7 组向量,分别是 wo 对应的(23;15) sh 对应的(19;8) ig 对应的(9;7) et 对应的 (5;20) ia 对应的(9;1) nc 对应的(14;3)ai 对应的(1;9)。 (3) 将这些向量分别 左乘 密钥又得到 7 组向量,分别是 : (38;45),(27;24),(16;24),(25;60),(10;3),(17;9), (10;27) 以此类推,最后得到的 7 组向量就变成了: (12;19),(1;24),(14;24),(25;8),(10;3),(17;9),(10,1)。 (4) 将数字通过字母标号表 对照过来。如下所示: lsaxnxyhjcqija hill 密码,加密是通过三个手段 一个是:字母标号表,一个是:加密矩阵,就是密钥,最 后一个是:加密矩阵的阶数。

Hill密码的加密

Hill密码的加密

Hill 密码的加密、解密和破译 实验报告吴林柱 5100309888实验任务2、利用所介绍的Hill 密码体制原理,根据所给定的26个英文字母的乱序表值(见表),设计与Hill 4密码体制的加密、解密与破译框图并建立必要的计算机程序。

设英文26个字母以下的乱序表与Z 26中的整数对应: A B C D E F G H I J K L M 5 23 2 20 10 15 8 4 18 25 0 16 13 N O P Q R S T U V W X Y Z 731196122421171422119(1)设⎪⎪⎪⎪⎪⎭⎫⎝⎛=4116109485105965968A ,验证矩阵A 能否作为Hill 4,用框图画出你的验算过程,并编写相应的计算机程序。

(2)设明文为HILL CRYPTOGRAPHIC SYSTEM IS TRADITIONAL 。

利用上面的表值与加密矩阵给此明文加密,并将得到的密文解密。

画出加密与解密过程的框图并编写相应的计算机程序。

(3)已知在上述给定值下的一段密文为JCOWZLVBDVLEQMXC ,对应的明文为DELAY OPERATIONSU 。

能否确定对应的加密矩阵?给出你的判断过程。

4、如下的密文据表10.1以Hill 加密,密文为VIKYNOTCLKYRJQETIRECVUZLNOJTUYDI MHRFITQ 。

已获知其中相邻字母LK 表示字母KE ,试破译这份密文。

5、找出元素属于Z 26的所有可能的Hill 密码加密矩阵。

若截获了如下一段密文UTCQCVFOYQUVMGMGULFOLEYHDUDOPEASWXTIFBAMWT 且知他是根据表10.1按Hill 密码 体制加密的,能否破译?实验解答2、(1)由定义可知,元素属于Z m 的方阵A 模m 可逆的充要条件是,m 和det A 没有公共素因子。

因此,框图如下:求矩阵A 的行列式 det A 若det A 与26没有公共素因子,则A 可用。

hill密码算法

hill密码算法

hill密码算法
Hill密码算法是一种基于线性代数的密码算法,旨在实现块密码的加密和解密操作。

它由美国数学家莱斯利·斯普兰特·希尔(Leslie S. Hill)于1929年提出。

Hill密码算法的主要思想是利用矩阵运算和模运算来实现加密和解密过程。

算法的关键在于定义一个矩阵作为密钥,然后将明文分成固定长度的块,每个块用矩阵乘法进行加密或解密。

具体步骤如下:
1. 选择一个密钥矩阵K。

矩阵K的行列数应该是一个合法的平方数,一般为2x2或3x3。

2. 将明文分成长度为密钥矩阵行(列)数的块。

每个块可以表示为一个列向量。

3. 对于加密操作,将每个明文块表示为一个列向量X。

计算密文块C = K * X % 26,其中% 26表示模运算。

得到的密文块也表示为一个列向量。

4. 对于解密操作,将每个密文块表示为一个列向量C。

计算明文块X = K^-1 * C % 26,其中K^-1表示矩阵K的逆矩阵。

得到的明文块也表示为一个列向量。

5. 将每个块转换为对应的字母或字符,即完成加密或解密操作。

需要注意的是,密钥矩阵K的选择很重要,它应该是一个可逆矩阵,即存在逆矩阵K^-1,使得K * K^-1 = I,其中I为单位矩阵。

否则,加密和解密操作将无法正确进行。

Hill密码算法的优点是可以同时处理多个字符,提高了加密的效率和安全性。

然而,它的缺点是对于大型密钥矩阵的逆矩阵计算较为困难,且算法的安全性依赖于密钥的保密性。

实验报告书-Hill密码体系

实验报告书-Hill密码体系

东南大学《数学实验》报告学号 09008123 姓名 郭晨 成绩 实验内容:Hill n 密码体系 一 实验目的实现Hill n 密码体系的关键环节(加密、解密、破译) 二 预备知识熟悉mod 、det 、find 等Matlab 命令 三 实验内容与要求(1)假设加密矩阵为A =⎪⎪⎭⎫⎝⎛3201,用M A T L A B 编制程序,加密下面一段明文:SHUXUEJIANMOJINGSAI(2)假设加密矩阵为A=1103⎛⎫⎪⎝⎭,用M A T L A B编制程序,解密下面一段密文:AXSTZOSAOPBSTKSAN OPSAHAUUNSUUAKGAUZCK KOP D O(3)甲方截获了一段密文:BKOPGATRHMMBFC SDJC CAUU经分析这段密文是用Hill2密码编译的,且这段密文的字母SDJC依次代表字母IJIA,请破译这段密文的内容1.输入范围A-Z的大写字母,支持任意阶加密矩阵function hillselect=input('请选择任务类型\n1.加密\n2.解密\n3.破译\n','s'); switch selectcase '1'hill_encryption;case '2'hill_decryption;case '3'hill_deciphering;otherwise disp('输入错误');endfunction hill_encryptionstring=input('请输入要加密的内容(必须为大写字母)\n','s'); s=input('请输入密钥矩阵阶数');j=length(string);t=ceil(j/s);m_in=zeros(1,s*t);m1=double(string)-double('A')+1;m_in(1:j)=m1;if(j<s*t)m2=ones(1,s*t-j);m_in(j+1:s*t)=m1(j)*m2;end;m3=reshape(m_in,s,t);disp('请按照列优先,以此输入密钥矩阵的各元素');for i=1:s*sdisp(i);K(i)=input(' ');end;K=reshape(K,s,s)n=26;c1=mod(K*m3,n)c2=reshape(c1,1,s*length(c1));c3= c2+'A'-1;for x=1:length(c3) if c3(x)=='A'-1 c3(x)='A'+25; end; end; cout=char(c3)function hill_decryptionstring=input('请输入要解密的内容(必须为大写字母)\n','s'); s=input('请输入密钥矩阵阶数');j=length(string);t=ceil(j/s);m1=double(string)-double('A')+1;m2=reshape(m1,s,t);disp('请按照列优先,以此输入密钥矩阵的各元素');for i=1:s*sdisp(i);K(i)=input(' ');end;K=reshape(K,s,s);n=26;mod_inv_K=invmod(K,n)m_1=mod(mod_inv_K*m2,n);m_2=reshape(m_1,1,s*length(m_1));m_3=m_2+'A'-1;for x=1:length(m_3) if m_3(x)=='A'-1 m_3(x)='A'+25; end; end; mout=char(m_3)function hill_decipheringn=26;s=input('请输入密钥矩阵阶数');disp('请依次输入已知内容的密文片段');for i=1:s*sdisp(i);Key(i)=input(' ','s');end;Key=double(Key)-double('A')+1;Key=reshape(Key,s,s);mod_inv_Key=invmod(Key,n);disp('请依次输入密文片段所代表的明文');for i=1:s*sdisp(i);m(i)=input(' ','s');end;m=double(m)-double('A')+1;m=reshape(m,s,s);m1=m* mod_inv_Key ;c1=mod(m1,n);string=input('请输入要破译的内容(必须为大写字母)\n','s');j=length(string);t=ceil(j/s);m1=double(string)-double('A')+1;m2=reshape(m1,s,t);mout=c1*m2;c1=mod(mout,n);c2=reshape(c1,1,s*length(c1));c3= c2+'A'-1;for x=1:length(c3)if c3(x)=='A'-1c3(x)='A'+25;end;end;cout=char(c3)function mod_inv_K=invmod(K,n)D=det(K);if gcd(D,n)~=1disp('Error! 不存在模意义下的逆'); elsefor i=1:n-1if mod(i*D,n)==1break;endendinvD=i;s=length(K);for i=1:sfor j=1:sK1=K;K1(i,:)=[]; K1(:,j)=[];K_star(j,i)=(-1)^(i+j)*det(K1);endendmod_inv_K=round(mod(invD*K_star,n)); end2.接受任意字符(模128),支持任意阶加密矩阵function hillselect=input('请选择任务类型\n1.加密\n2.解密\n3.破译\n','s'); switch selectcase '1'hill_encryption;case '2'hill_decryption;case '3'hill_deciphering;otherwise disp('输入错误');endfunction hill_encryptionstring=input('请输入要加密的内容\n','s');s=input('请输入密钥矩阵阶数')j=length(string);t=ceil(j/s);m_in=zeros(1,s*t);m1=double(string);m_in(1:j)=m1;if(j<s*t)m2=ones(1,s*t-j);m_in(j+1:s*t)=m1(j)*m2;end;m3=reshape(m_in,s,t);disp('请按照列优先,以此输入密钥矩阵的各元素');for i=1:s*sdisp(i);K(i)=input(' ');end;K=reshape(K,s,s)n=128;c1=mod(K*m3,n)q=length(c1)c2=reshape(c1,1,s*length(c1));cout=char(c2)function hill_decryptionstring=input('请输入要解密的内容\n','s');s=input('请输入密钥矩阵阶数');j=length(string);t=ceil(j/s);m1=double(string);m2=reshape(m1,s,t);disp('请按照列优先,以此输入密钥矩阵的各元素'); for i=1:s*sdisp(i);K(i)=input(' ');end;K=reshape(K,s,s);n=128;mod_inv_K=invmod(K,n)m_1=mod(mod_inv_K*m2,n);m_2=reshape(m_1,1,s*length(m_1));mout=char(m_2)function hill_decipheringn=128;s=input('请输入密钥矩阵阶数');disp('请依次输入已知内容的密文片段');for i=1:s*sdisp(i);Key(i)=input(' ','s'); end;Key=double(Key);Key=reshape(Key,s,s);mod_inv_Key=invmod(Key,n);disp('请依次输入密文片段所代表的明文');for i=1:s*sdisp(i);m(i)=input(' ','s');end;m=double(m);m=reshape(m,s,s);m1=m* mod_inv_Key ;c1=mod(m1,n);string=input('请输入要破译的内容\n','s');j=length(string);t=ceil(j/s);m1=double(string);m2=reshape(m1,s,t);mout=c1*m2;c1=mod(mout,n);c2=reshape(c1,1,s*length(c1));cout=char(c2)function mod_inv_K=invmod(K,n)D=det(K);if gcd(D,n)~=1disp('Error! 不存在模意义下的逆'); elsefor i=1:n-1if mod(i*D,n)==1break;endendinvD=i;s=length(K);for i=1:sfor j=1:sK1=K;K1(i,:)=[]; K1(:,j)=[];K_star(j,i)=(-1)^(i+j)*det(K1);endendmod_inv_K=round(mod(invD*K_star,n)); end。

密码学实验报告

密码学实验报告

密码学实验报告摘要:本实验旨在通过实践掌握基本密码学算法的原理和应用。

在本次实验中我们完成了Caesar密码、仿射密码、VIC密码和Hill密码的加密和解密过程,并进行了相应的分析和评价。

实验结果表明,不同的密码算法有各自的优缺点,应根据具体需求进行选择。

一、实验目的1.了解基本密码学算法的原理和应用。

2.通过实践掌握Caesar密码、仿射密码、VIC密码和Hill密码的加密和解密过程。

3.分析和评价各个密码算法的优缺点。

二、实验原理Caesar密码:是一种非常简单的单字母替换密码。

按照字母表上旋转的位置,每个字母都用它在字母表中的下一个字母替代。

仿射密码:通过将明文中的每个字母转换为另一个字母,实现加密。

明文中的每个字母通过使用一组固定的数学函数进行加密。

随机选择这些函数,并按正确的顺序应用它们。

VIC密码:将某些字母替换为其他字母组合的运算称为置换。

VIC密码使用10个钥匙,其中每个钥匙是一个置换。

通过使用不同的键,VIC密码可以很容易地产生四十亿多个不同的密码。

Hill密码:是一种基于线性代数理论的密码算法。

对于一个给定的矩阵α,Hill密码通过将明文划分为每个字母,然后将其与矩阵α乘法来加密,最后将结果映射回字母表中的字母。

三、实验过程1.实现Caesar密码的加密和解密。

2.实现仿射密码的加密和解密。

3.实现VIC密码的加密和解密。

4.实现Hill密码的加密和解密。

5.对各个密码算法进行分析和评价。

四、实验结果1.在Caesar密码中,明文是将每个字母按照一定的步长向右或向左移动来进行加密。

由于其简单性,Caesar密码的加密和解密都很容易,但安全性较低。

2.仿射密码是Caesar密码的扩展版本。

通过随机选择两个数字,仿射密码在加密的过程中使用模运算和线性函数组合对明文进行加密。

由于消息加密和解密都使用数学功能进行计算,因此密钥空间大于Caesar,也比较安全。

3.VIC密码使用多个置换键(通常为10),交替使用它们来完成加密和解密过程。

数学建模实验报告之Hill密码程序

数学建模实验报告之Hill密码程序

东南大学《数学实验》报告学号09008226 姓名毕斌成绩实验内容:编写Hill密码程序一实验目的编制通用的Hill n密码程序二预备知识(1)熟悉Hill n密码加密过程及实现方法(2)熟悉mod、det、inv等Matlab命令三实验内容与要求用MATLAB或C++编制通用的Hill n密码程序(包括加密、解密及破译三个环节)function encryption %加密函数msg = input('输入要加密的明文:\n','s')s = 2; %两个字符一组msg_len = length(msg); %字符长度col = ceil(msg_len/s); %分组数m0 = zeros(1, s*col); %初始化m1 = double(lower(msg))-double('a')+1;m2 = m1+64*(m1<0);m0(1:msg_len) = m2;m3 = reshape(m0,s,col); %构造用于加密的矩阵disp('加密密钥:')K = [1, 1; 0, 3]n = 26;c1 = mod(K*m3,n); %模意义下的矩阵运算c2 = reshape(c1,1,s*length(c1));c3 = c2 - 64*(c2 == 0); %构造输出矩阵disp('密文:')sct = char(c3 + 'a' -1) %输出密文function decryption %解密函数sct = input('输入要解密的密文:\n', 's')s = 2;sct_len = length(sct);col = ceil(sct_len/s);c0 = zeros(1,s*col);c1 = double(lower(sct))-double('a')+1;c2 = c1+64*(c1<0);c0(1:sct_len) = c2;c3 = reshape(c0,s,col);K = [1, 1; 0, 3];n = 26;disp('解密密钥:');inv_K = invmod(K,n) %调用自定义函数求模意义下的逆矩阵m1 = mod(inv_K*c3,n);m2 = reshape(m1,1,s*length(m1));m3 = m2-64*(m2 == 0);msg = char(m3+'a'-1)function mod_inv_K = invmod(K,n) %自定义函数求模意义下的逆矩阵D = det(K);if gcd(D,n)~=1disp('Error! 不存在模意义下的逆');elsefor i = 1:n-1if mod(i*D,n) == 1break;endendinvD = i;K_len = length(K);for i = 1:K_lenfor j = 1:K_lenK1 = K;K1(i,:) = [];K1(:,j) = [];K_star(j,i) = (-1)^(i+j)*det(K1);endendmod_inv_K = round(mod(invD*K_star,n));end实验结果:>> encryption输入要加密的明文:damnmsg =damn加密密钥:K =1 10 3密文:sct =ecap>> decryption输入要解密的密文:ecapsct =ecap解密密钥:inv_K =1 170 9 msg =damn。

实验报告书-Hill密码体系

实验报告书-Hill密码体系
bkopgatrhmmbfcsdjccauu经分析这段密文是用hill2密码编译的且这段密文的字母sdjc依次代表字母ijia请破译这段密文的内容matlab命令结果的编写通用的hill密码程序并存放在hillm文件中hill程序会调用translatem文件中的translate函数用来对函数用来对ascii码串和字符串的转换
3
disp('输入密钥,按行输入'); A=[]; for i=1:n for j=1:n A(i,j)=input(''); end end if gcd(det(A),26)~=1 error('密钥矩阵模 26 不可逆,无法实现 Hill 密码'); end disp('输入所要加密的明文(A-Z) :'); message1=input('','s'); %translate 函数功能为 返回 A*message1 message2=translate(A,message1,n); disp(['加密后密文为:',message2]); break; case 2 %输入密钥 disp('输入密钥矩阵的阶数:'); n=input(''); disp('输入密钥,按行输入'); A=[]; for i=1:n for j=1:n A(i,j)=input(''); end end X=[1 0 9 0 21 0 15 0 3 0 19 0 0 0 7 0 23 0 11 0 5 0 17 0 25 0]; %按顺序存放 1-25 的 模 26 的倒数,0 代表无倒数 d=mod(det(A),26); %求矩阵的行列式并对 26 取模 if d==0 x=0; else x=X(d); end AA=[];%AA 为 A 的模 26 逆矩阵 if x==0 %判断矩阵是否模 26 可逆 error('密钥矩阵模 26 不可逆,无法实现 Hill 密码'); end B=det(A)*inv(A); %A 的伴随矩阵 AA=mod(round(x*B),26); disp('A 的模 26 的逆矩阵为 AA:'); disp(AA);

实验报告书-Hill密码体系

实验报告书-Hill密码体系

实验内容:Hill n 密码体系 一 实验目的实现Hill n 密码体系的关键环节(加密、解密、破译) 二 预备知识熟悉mod 、det 、find 等Matlab 命令 三 实验内容与要求(1)假设加密矩阵为A =⎪⎪⎭⎫⎝⎛3201,用M A T L A B 编制程序,加密下面一段明文:SHUXUEJIANMOJINGSAI(2)假设加密矩阵为A =1103⎛⎫⎪⎝⎭,用M A T L A B编制程序,解密下面一段密文:AXSTZOSAOPBSTKSAN OPSAHAUUNSUUAKGAUZC K KOP D O(3)甲方截获了一段密文:BKOPGATRHMMBFC SDJC CAUU经分析这段密文是用Hill 2密码编译的,且这段密文的字母SDJC依次代表字母IJIA ,请破(4)编写通用的Hill密码软件(Matlab或C++) Shiyan.m代码function mima=shiyan(x,A)n=length(x);x2=double(x)-96;x3=reshape(x2,2,n/2);x4=A*x3;x5=mod(reshape(x4,1,n),26)+96;x5(find(x5==96))=122;mima=char(x5);sy2.m代码:function mingwen=sy2(x,A)n=length(x);x2=double(x)-96;x3=reshape(x2,2,n/2);a=floor(det(A));aa=qiumoni(a);A_inv=mod(aa*det(A)*inv(A),26);x4=A_inv*x3;x5=mod(reshape(x4,1,n),26)+96;x5(find(x5==96))=122;mingwen=char(x5);qiumoni代码:function aa=qiumoni(a)a=a;aa=0;for i=1:25if mod(a*i,26)==1aa=i;breakendendif aa==0disp('没有该模的逆')endsy3.m代码:function A=sy3(a1,a2)C=reshape(double(a1)-96,2,2);P=reshape(double(a2)-96,2,2);c=mod(det(C),26);cc=qiumoni(c);%qiumoni请参见(2)C_inv=mod(cc*det(C)*inv(C),26);A=mod(P*C_inv,26)%使用说明:%先建立Shiyan.m、sy2.m、qiumoni.m、sy3.m三个M文件%1、进行加密操作:% 将加密的内容写在“x=’’”中的单引号中,将加密矩阵写在“A=’’”的单引号中,接着%输入“mima=shiyan(x,A)”即可得到密文。

hill密码算法

hill密码算法

hill密码算法(最新版)目录1.Hill 密码算法概述2.Hill 密码算法的原理3.Hill 密码算法的优缺点4.Hill 密码算法的应用5.总结正文1.Hill 密码算法概述Hill 密码算法,又称希尔密码,是一种基于替换的古典密码。

该密码算法是由英国密码学家 George C.Hill 在 19 世纪末 20 世纪初发明的,主要用于保护军事通信中的秘密信息。

与更早的 Vigenère 密码类似,Hill 密码通过对明文中的字符进行多字母替换来实现加密,但其替换方式更为复杂。

2.Hill 密码算法的原理Hill 密码算法的核心思想是利用一个固定的密钥(通常是一个单词或短语)来重新排列明文中的字母。

具体来说,明文中的每个字母都会根据密钥中对应的字母进行替换,替换后的字母再按照一定顺序排列。

这样,明文经过加密后,会变成一段看似无意义的文字。

Hill 密码算法的具体步骤如下:(1) 将明文中的每个字母用密钥中的字母替换。

例如,如果密钥是“abc”,那么明文中的“a”会替换为“b”,“b”会替换为“c”,“c”会替换为“a”。

(2) 将替换后的字母按照一定顺序重新排列。

这一步通常需要借助一个称为“密钥长度”的参数。

例如,如果密钥长度为 3,那么替换后的字母会按照每隔 3 个字母进行排列。

(3) 将排列好的字母作为密文进行传输。

3.Hill 密码算法的优缺点Hill 密码算法的优点是相对简单易懂,且在当时具有较强的安全性。

然而,随着密码学研究的深入,人们逐渐发现了 Hill 密码算法的缺点,如密钥长度较短时容易受到字频分析的攻击,以及替换方式较为单一等。

这使得 Hill 密码算法逐渐被更先进的密码算法所取代。

4.Hill 密码算法的应用尽管 Hill 密码算法在现代密码学中已不再具有实用价值,但它仍然具有一定的历史意义。

作为古典密码学的一个重要组成部分,Hill 密码算法为后世研究者提供了很多有关密码学的启示和灵感。

Hill密码的加密、解密与破译

Hill密码的加密、解密与破译
Hill密码的加密、解密与破译
一、问题背景和实验目的
保密通讯在军事、政治、经济斗争和竞争中的重 要性是不言而喻的.他采用的一种方式是:将原来的信 息(称为 明文) 经过加密,变成密文之后发送出去,使 敌方即使得到密文也读不懂,而合法的接收者收到密文 之后却可以按照预先约定好的方法加以解密,再翻译成 明文.而敌方却要千方百计从密文破译出明文来.一方 如何编制密码使之不易被破译,另一方则要找到其弱点 加以破译,这就构成了密码学的主要内容.
a (modm)(modm) a a (mod m ) a (mod m ) 1 2 1 2 * *
模运算意义下的矩阵逆概念
定义1 对于一个元素属于集合Gm的n阶方阵A,若 存在一个元素属于Gm的方阵B,使得 A B=B A=E(mod m) x 则称A为模m可逆,B为A的模 m的逆矩阵,记为 1 A B= (mod)。 定义2 对Gm的一个整数x,存在Gm的一个整数y, 使得xy=1(mod m),则称y为x的乘法逆(或 1 者称为倒数),记y= (x mod m)。 可以证明,如果x与m无公共素数因子,则x有唯 一的模m倒数 。
加 密 过 程 的 具 体 步
A乘以 ,得一新的2维列向量 Aa ,由 的两个分量反查字母表值得到的两 个字母即为密文字母。

例如 明文为 SHUXUEJIANMOJINGSAI , 加密矩阵为A=1 2 0 3Fra bibliotek 。
密文为
IX QT EO BA CP QS BA BU UC AA 在查字母表时利用了模运算概念 关于模运算有如下运算律

1
据此我们不加证明地给出如下命题: 命题 元素属于Gm的方阵A模m可逆的充要条件 是: m和detA没有公因子。易见,所选加密矩阵 必须符合模A可逆的条件。

HILL密码——密码学

HILL密码——密码学

Hill 密码Hill 体制是1929年由Lester S.Hill 发明的,它实际上就是利用了我们熟知的线性变换方法,是在26Z 上进行的。

Hill 体制的基本思想是将n 个明文字母通过线性变换转化为n 个密文字母,解密时只需做一次逆变换即可,密钥就是变换矩阵。

设明文n n Z m m m m 2621),,(∈⋯+=,密文n n Z c c c c 2621),,.,(∈⋯=,密钥为26Z 上的n n ⨯阶可逆方阵n n ij k K ⨯=)(,则26mod 26mod 1-==cK m mK c 解密:明文加密:密文具体过程:1、 假设要加密的明文是由26个字母组成,其他字符省略。

2、 将每个字符与0-25的一个数字一一对应起来。

(例如:a/A —0,b/B —1,……z/Z —25)。

3、 选择一个加密矩阵n n A ⨯,其中矩阵A 必须是可逆矩阵,例如⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=15227132102123916296101571823055117A 4、 将明文字母分别依照次序每n 个一组(如果最后一组不足n 个的话,就将其补成n个),依照字符与数字的对应关系得到明文矩阵ming n n len ⨯/。

5、 通过加密矩阵A ,利用矩阵乘法得到密文矩阵mi n n len ⨯/= ming n n len ⨯/⨯n n A ⨯mod 26;6、 将密文矩阵的数字与字符对应起来,得到密文。

7、 解密时利用加密矩阵的逆矩阵1-A 和密文,可得到明文。

实例 随机产生一个5阶加密方阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=15227132102123916296101571823055117A得到方阵A 的逆矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-9131341212252318151920391211824723102141871A加密过程:输入明文:Hill cipher is one of my favorite cipher分组:Hillc ipher isone ofmyf avori tecip her(aa)加密得到密文:SKSXAQERQQYDVDGBKNVSMWZATGIAPDOJBIO解密过程:输入密文:SKSXAQERQQYDVDGBKNVSMWZATGIAPDOJBIO解密得到密文:HILLCIPHERISONEOFMYFA VORITECIPHERAA代码部分:#include <iostream>#include <string>#include <math.h>#include <stdlib.h>using namespace std;int A[1000][1000];//转化矩阵int a[1000][1000];//[A E]int B[1000][1000];//A^(-1)int ming[1000][1000];//明文矩阵int mi[1000][1000];//密文矩阵int n;//矩阵的阶数void input()//输入数据{int i, j;//cout << "请输入矩阵的元素" << endl;for( i = 1; i <= n; i++ )for( j = 1; j <= n; j++ )//cin >> A[i][j];A[i][j] = rand() % 26;memcpy( a, A, sizeof( A ) );//将矩阵A 复制给afor( i = 1; i <= n; i++ )//将矩阵变成[a E]的形式,E 为单位矩阵{for( j = n + 1; j <= 2*n; j++ ){if( i + n == j )a[i][j] = 1;elsea[i][j] = 0;}}}void output(){int i,j;cout << "矩阵阶数:" << n <<endl;cout << "矩阵A的元素:" << endl;for( i = 1; i <= n; i++ ){for( j = 1; j <= n; j++ )cout << A[i][j] << " ";cout << endl;}cout << "A矩阵的逆矩阵B为" << endl;for( i = 1; i <= n; i++ )//输出A矩阵的逆矩阵B{for( j = 1; j <= n; j++ ){B[i][j] = a[i][j+n];cout << B[i][j] << " ";}cout << endl;}}int Extend_Gcd( int a, int b, int &x, int &y )//扩展欧几里得算法{if( b == 0 ){x = 1;y = 0;return a;}int r = Extend_Gcd( b, a % b, x, y ); //a'=b;b'=a%b; a'x + b'y <=> bx + (a-a/b*b)y <=> ay + b(x-a/b*y)int t = x;x = y;y = t - a / b * y;return r;}int ni( int a)//求逆a*x=1(mod n){int x, y;int d = Extend_Gcd( a, 26, x, y );if( d == 1 )return ( x % 26 + 26 ) % 26;elsereturn -1;}int gaosi()//高斯-约当消元求A矩阵的逆矩阵B{int i, j, k;for( k = 1; k <= n; k++ )//高斯-约当消元{int Ni = ni( a[k][k] );if( Ni == -1 ) return 0;//cout << Ni << endl;for( i = k + 1; i <= 2 * n; i++ )a[k][i] = ( a[k][i] * Ni % 26 + 26 ) % 26;for( i = 1; i <= n; i++ ){if( i == k ) continue;for( j = k + 1; j <= 2 * n; j++ )a[i][j] = ( ( a[i][j] - a[i][k] * a[k][j] % 26 ) % 26 + 26 ) % 26;}}return 1;}void jiami() //加密过程{int i, j, k;char mingstr[100];char mingc;cout << "请输入明文" << endl;cin >> mingstr;//getchar();//gets( mingstr );int len = strlen( mingstr );if( len % n ){for( i = len; i < len/n*n+n; i++)mingstr[i] = 'a';mingstr[i] = '\0';}puts( mingstr );int Len = strlen( mingstr );cout << "字符串长度:" << Len << endl;for( i = 1; i <= Len/n; i++ )//将明文分成len/n段{for( j = 1; j <= n; j++ )//求每一段的明文转换为矩阵{if( mingstr[(i-1)*n+j-1] >= 'a' && mingstr[(i-1)*n+j-1] <= 'z' )ming[i][j] = mingstr[(i-1)*n+j-1] - 'a';elseming[i][j] = mingstr[(i-1)*n+j-1] - 'A';//cout << ming[i][j] << " ";}//cout << endl;}for( k = 1; k <= Len/n; k++ )//求len/n段的密文矩阵{for( i = 1; i <= n; i++ )//利用矩阵的乘法{mi[k][i] = 0;for( j = 1; j <= n; j++ )mi[k][i] = ( mi[k][i] + ming[k][j] * A[j][i] % 26 + 26 ) % 26;//cout << mi[k][i] << endl;}}cout << "密文为" << endl;for( i = 1; i <= Len/n; i++ )//输出密文{for( j = 1; j <= n; j++ ){mingc = mi[i][j] + 'A';cout << mingc;}}cout << endl;}void jiemi()//解密过程{int i, j, k;char mistr[100];char mingc;cout << "请输入密文" << endl;cin >> mistr;//getchar();//gets( mistr );//puts( mistr );int len = strlen( mistr );for( i = 1; i <= len/n; i++ )//将密文分成len/n段{for( j = 1; j <= n; j++ )//求每一段的密文转换为矩阵{if( mistr[(i-1)*n+j-1] >= 'a' && mistr[(i-1)*n+j-1] <= 'z' )mi[i][j] = mistr[(i-1)*n+j-1] - 'a';elsemi[i][j] = mistr[(i-1)*n+j-1] - 'A';}}for( k = 1; k <= len/n; k++ )//求len/n段的明文矩阵{for( i = 1; i <= n; i++ )//利用矩阵的乘法{ming[k][i] = 0;for( j = 1; j <= n; j++ )ming[k][i] = ( ming[k][i] + mi[k][j] * B[j][i] % 26 + 26 ) % 26;// cout << mi[i] << endl;}}cout << "明文为" << endl;for( i = 1; i <= len/n; i++ )//输出明文{for( j = 1; j <= n; j++ ){mingc = ming[i][j] + 'A';cout << mingc;}}cout << endl;}int main(){bool flag = 1;cout << "欢迎使用Hill体制进行加解密!" << endl;while( flag ){cout << "请输入加密矩阵的阶数n:";cin >> n;do{input();//数据输入}while( !gaosi() );output();//gaosi();//用高斯-约当消元求矩阵A%26的逆Bjiami();//加密过程jiemi();//解密过程cout << "是否继续加密解密?1:继续,0:否" << endl;cin >> flag;}return 0;}/*abcdefghijklmnopqrstuvwxyz*/。

Hill密码的加密解密

Hill密码的加密解密

【实验十】Hill密码的加密、解密与破译一、实验目的本实验主要涉及代数,利用模运算下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习Hill密码体制的加密、解密和破译过程二、实验任务任务五找出元素属于Z26的所有可能的Hill2密码加密矩阵。

若截获了如下一段密文:UTCQCVFOYQUVMGMGULFOLEYHDUHOPEASWXTIFBAMWT且已知它是根据表10.1按Hill2密码体制加密的,你能否将其解密?分析:对于第一问,找出元素属于Z26的所有可能的Hill2密码加密矩阵,我们只需要用枚举法即可。

关键在于第二问的解密,根据我们编写的C++程序,共有约15万个可能的加密矩阵,也就对应着同等数量的可能明文。

所以问题的重点就在于如何从这么多数量的明文中筛选出有意义的信息。

1、找出元素属于Z26的所有可能的Hill2密码加密矩阵C++源代码(枚举加密矩阵部分):chain_mat* head=new chain_mat; //加密矩阵用链表储存head->next=NULL;chain_mat* now=head;int n=0;for(int a=0;a<26;a++)for(int b=0;b<26;b++)for(int c=0;c<26;c++)for(int d=0;d<26;d++){intdet=a*d-b*c;if(det%2!=0&&det%13!=0) //判断是否模26可逆{chain_mat* newm=new chain_mat;newm->dat[0][0]=a;newm->dat[0][1]=b;newm->dat[1][0]=c;newm->dat[1][1]=d;n++; //累加符合要求的矩阵数量now->next=newm;now=now->next;now->next=NULL;}}运行结果:n=157248由于矩阵数量过多,我们将其存储在matrixlist.txt文件中C++源代码(输出矩阵部分):voidoutput_mat(chain_mat* head){ofstreamoutfile;outfile.open("matrixlist.txt");chain_mat* now=head->next;while(now!=NULL){outfile<<now->dat[0][0]<<'\t'<<now->dat[0][1]<<'\n'<<now->dat [1][0]<<'\t'<<now->dat[1][1]<<"\n=========="<<endl;now=now->next;}outfile.close();}下面给出matrixlist.txt中部分内容(完整文件将发至邮箱):0 11 0==========0 11 1==========0 11 2==========0 11 3==========0 11 4==========0 11 5==========0 11 6==========0 11 7==========0 11 8==========0 11 9==========0 11 10==========2.解密题中密文首先需要做的是对矩阵进行模逆运算C++源代码(模26逆矩阵运算部分):voidinv(chain_mat* m1){intdet=m1->dat[0][0]*m1->dat[1][1]-m1->dat[0][1]*m1->dat[1][0];det=reci(det);inttmp;tmp=m1->dat[0][0]*det;m1->dat[0][0]=m1->dat[1][1]*det;m1->dat[1][ 1]=tmp;m1->dat[0][1]*=-1*det;m1->dat[1][0]*=-1*det;for(inti=0;i<2;i++)for(int j=0;j<2;j++){m1->dat[i][j]%=26;if(m1->dat[i][j]<0)m1->dat[i][j]+=26;}}然后用逆矩阵乘密文向量,得到可能明文序列,存入名为me1的string数组中C++源代码(模26逆矩阵运算部分):n=0;while(now!=NULL)inv(now);for(inti=0;i<sizeof(str)-1;i+=2){int s1=now->dat[0][0]*co1[i]+now->dat[0][1]*co1[i+1];int s2=now->dat[1][0]*co1[i]+now->dat[1][1]*co1[i+1];s1%=26;s2%=26;if(s1<0)s1+=26;if(s2<0)s2+=26;if(s1==0)s1=26;if(s2==0)s2=26;me1[n]+=('A'+s1-1);me1[n]+=('A'+s2-1);}n++;inv(now);now=now->next;}至此,我们得到了157248条可能的明文,接下来就要考虑筛选的问题。

实验十【Hill密码的加密解密与破译】

实验十【Hill密码的加密解密与破译】

Hill 密码的加密、解密与破译[实验十] Hill 密码的加密、解密与破译一、实验目的本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习Hill 密码体制的加密、解密和破译过程。

二、实验内容(1)甲方收到与之有秘密通信往来的乙方的一个密文信息,密文内容: W O W U Y S B A C P G Z S A V C O V K P E W C P A D K P P A B U J C Q L Y X Q E Z A A C P P按照甲方与乙方的约定,他们之间的密文通信采用Hill 2密码,密钥为二阶矩阵 且汉语拼音的26个字母与0~25之间的整数建立一一对应的关系,称之为字母的表值,具体的表值见表10. 1 明文字母的表值。

问这段密文的原文是什么?(2)甲方截获了一段密文: O J W P I S W A Z U X A U U I S E A B A U CR S I P L B H A A M M L P J J O T E N H 经分析这段密文是用Hill 2密码编译的,且这段密文的字母UCRS 依次代表字母TACO ,问能否破译这段密文的内容?三、Hill 2密码的数学模型 Ⅰ、加密与解密过程Hill 2密码是一种传统的密码体制,它的加密过程可用以下框图描述:⎪⎭⎫⎝⎛=3021A明文------加密器------密文------普通信道------解密器密码分析(敌方截获)----- 明文在这个过程中,运用的数学手段是矩阵运算,加密过程的具体步骤如下: 1.根据明文字母的表值将明文信息用数字表示,设明文信息只需要26个拼音字母A~Z (也可能不止26个,如还有数字、标点符号等),通信双方给出这26个字母表值(见表10.1明文字母的表值)。

2.选择一个二阶可逆整数方阵A ,称为Hill 2密码的加密矩阵,它是这个加密体制的“密钥”(是加密的关键,仅通讯双方掌握)。

hill密码算法

hill密码算法

hill密码算法摘要:1.Hill 密码算法概述2.Hill 密码算法的原理3.Hill 密码算法的优缺点4.Hill 密码算法的应用实例5.总结正文:1.Hill 密码算法概述Hill 密码算法是一种基于替换和转置的古典密码算法,由英国密码学家George EC Hill 在1935 年提出。

这种密码算法主要应用于密码学领域的初学者,以及对密码学有兴趣的人。

它并非一种高级加密标准(AES)或RSA 等现代加密算法,但对于理解加密算法的基本原理和历史发展具有一定的参考价值。

2.Hill 密码算法的原理Hill 密码算法的基本原理是通过替换和转置来实现明文到密文的转换。

替换是指将明文中的每个字母用一个固定的字母替换,而转置则是指将明文中的字母按照一定的规则重新排列。

具体来说,Hill 密码算法分为两个步骤:步骤一:替换。

在明文中选取一个固定的字母,例如“E”,将其替换为另一个固定的字母,例如“X”。

然后,将明文中的每个字母都按照同样的规则替换。

步骤二:转置。

将替换后的明文按照一定的顺序重新排列。

例如,可以将明文按照字母表顺序进行排列,也可以按照其他特定的顺序进行排列。

3.Hill 密码算法的优缺点Hill 密码算法的优点在于其简单易懂,适合密码学初学者学习。

然而,这种密码算法也存在一些明显的缺点:首先,由于Hill 密码算法的密钥较短,容易受到暴力破解的攻击。

现代计算机的计算能力非常强大,可以很快地破解出基于短密钥的Hill 密码。

其次,Hill 密码算法的密文文本难以阅读和理解。

由于密文中的字母被替换和转置,导致密文难以解读,这给实际应用带来了一定的困难。

4.Hill 密码算法的应用实例虽然Hill 密码算法在现代密码学领域并不常用,但它仍然可以作为一种有趣的密码学实验。

例如,可以用Hill 密码算法对一些简单的文本进行加密和解密,以了解加密算法的基本原理。

5.总结Hill 密码算法是一种基于替换和转置的古典密码算法,虽然与现代加密算法相比存在一定的局限性,但对于密码学初学者来说,它仍然是一种有价值的学习资源。

Hill算法实验报告

Hill算法实验报告

}
注意:其中的bs为各小矩阵的行列式的值。

以上两段代码为关于如何进行逆矩阵转换的具体实现。

4.输入与输出:
本算法的输入为如下三项:
a. 已知明密文对每对的字符个数;
b. 已知的明文对(若干);
c. 与之相对应的密文对。

本算法的输出为如下三项:
a. 行代换后的明文矩阵;
b. 明文矩阵的逆矩阵;
c. 最终解得的密钥矩阵K。

5.最终运行结果:
输入如下所述:
已知明密文对每对的字符个数:2
已知的明文:fr,与之相对的密文:PQ;
已知的明文:id,与之相对的密文:CF;
输出为下图所示:
出现的问题以及解决方案:
问题1:所做出的密钥矩阵K中元素的数值是小数。

解决方案:由于忽视了每次矩阵的mod26计算,造成了最终得出的密钥矩阵K中的小数。

只需对每一个被除数每次+26直到除尽即可。

最后统一进行mod 26直到最简。

实验十-Hill密码的加密、解密与破译

实验十-Hill密码的加密、解密与破译
disp('Error');
else
for i=1:25
if mod(i*D,26)==1
break
end;
end;
invD=i;
Y=mod(D*inv(P)*invD,26);
end;
Y=mod(C*Y,26);
y=true
运行结果:y=[25 9 20 19 ;2 16 17 13;3 17 16 22;14 23 10 2]
miwen(k)=dxzm(b);
end
mw0='';
for k=1:n
mw0(k)=miwen(k);
end
disp(['密文是',mw0])
执行结果:
密文是:BFQYYXRBSGTDPJJZXK
(3)
function Y=invmod(C,P)
D=det(P);
D=round(D)
if gcd(D,26)~=1
2.学习掌握线Hill密码体制的加密、解密和破译过程.
实验环境
MatlabR2012b
实验内容:
实际问题:(1)甲方收到与之有秘密通信来往的乙方的一个密文信息,密文内容:QSIUYSBACPGZSAVCOVKPEWCPADKPPABUJCQLYXQEZAACPP
按照甲方与乙方的约定,他们之间的密文通信采用Hill2密码。密钥为二阶矩阵 。且汉语拼音的26个字母与0~25之间的整数建立一一对应的关系,称之为字母的表值,具体的表值见表10.1.问这段密文的原文是什么?
1.(1)
disp('输入密钥矩阵的为数');
n=input('');
disp('输入密钥矩阵(按行输入)');
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2ห้องสมุดไป่ตู้
m=size(message); m=m(2); if mod(m,n)~=0 error('输入错误,密文长度应为矩阵维数的 倍数'); end for i=1:m if message(i)>='A' && message(i)<='Z' message(i)=message(i)-64; else error('输入错误,应该输入字母'); end end %r1 为 d 的逆 while d>26 d=mod(d,26); end switch d case 1 r1=1; case 3 r1=9; case 5 r1=21; case 7 r1=15 case 9 r1=3; case 11 r1=19; case 15 r1=7; case 17 r1=23; case 19 r1=11; case 21; r1=5; case 23 r1=17; case 25 r1=25; otherwise disp('d 倒数不存在'); end
3
detk=det(key); invk=inv(key); k=detk*invk; key2=r1*k; for i=1:n for j=1:n key2(i,j)=mod(key2(i,j),26); if key2(i,j)<0 key2(i,j)=key2(i,j)+26; end end end i=1; while i<m+1 p=message(i:i+n-1)'; a=key2*p; B(i:i+n-1)=a'; i=i+n; end for i=1:m if B(i)>26 B(i)=mod(B(i),26); End if B(i)==0 B(i)=26; end B(i)=B(i)+64; end str2=char(B); fprintf('\n 对密文解密后明文为%s\n',str2) end
1
message(i)=message(i)-64; else error('输入错误,应该输入字母'); end end %加密 i=1; while i<m+1 B=message(i:i+n-1)'; a=key*B; A(i:i+n-1)=a'; i=i+n; end for i=1:m if A(i)>26 A(i)=mod(A(i),26); end A(i)=A(i)+64; end str=char(A); fprintf('密文为%s',str) 1 1 (2)假设加密矩阵为 A= ,用 MATLAB 编制程序,解密下面一 0 3
段密文: AXSTZOSAOPBSTKSANKOPSAHAUUNSUUAKGAUZCKOPDO 命令 结果
function hill2() YTMHOSTCEVUEEGTC %输入密钥 disp('输入密钥(矩阵)的维数'); YGEVTCICPKGEPKLG n=input(''); disp('输入密钥(矩阵,按行输入)'); HCU@NGEVSS key=zeros(n,n); for j=1:n for k=1:n key(j,k)=input(' '); end end d=det(key);%求矩阵的行列式 if d==0%判断矩阵是否可逆 error('密钥矩阵不可逆,无法实现 Hill 密码 '); end %输入密文 message=input('输入密文 \n','s');
(3)甲方截获了一段密文:
BKOPGATRHMMBFCSDJCCAUU 经分析这段密文是用 Hill2 密码编译的,且这段密文的字母 SDJC 依次代表字母 IJIA, 请破 , 译这段密文的内容
Matlab 命令
结果
4
function hill3() OSQDRWDXSMSTGQ %截获的密文 message1=input('输入截获密文 \n','s'); WNWQBWDO for i=1:4 if message1(i)>='A' && message1(i)<='Z' message1(i)=message1(i)-64; else error('输入错误,应该输入大写字母'); end end %对应的明文 message2=input('输入对应的明文 \n','s'); for i=1:4 if message2(i)>='A' && message2(i)<='Z' message2(i)=message2(i)-64; else error('输入错误,应该输入大写字母'); end end %求密钥的逆矩阵 B=[]; B(1,1)=message1(1);B(2,1)=message1(2); B(1,2)=message1(3);B(2,2)=message1(4); d=det(B); while d>26 d=mod(d,26); end switch d case 1 r1=1; case 3 r1=9; case 5 r1=21; case 7 r1=15 case 9 r1=3; case 11 r1=19; case 15 r1=7; case 17 r1=23;
5
case 19 r1=11; case 21; r1=5; case 23 r1=17; case 25 r1=25; otherwise disp('d 倒数不存在'); end detk=det(B); invk=inv(B); k=detk*invk; for i=1:2 for j=1:2 k(i,j)=mod(k(i,j),26); if k(i,j)<0 k(i,j)=k(i,j)+26; end end end C=[]; C(1,1)=message2(1);C(2,1)=message2(2); C(1,2)=message2(3);C(2,2)=message2(4); key1=C*k; for i=1:2 for j=1:2 key1(i,j)=mod(key1(i,j),26); if key1(i,j)<0 key1(i,j)=key1(i,j)+26; end end end disp('密钥的逆矩阵:') key1
(4)编写通用的 Hill 密码软件(Matlab 或 C++)
通用的 Hill 密码软件就是把上面三个函数放在一个 m 文件中就可,要实现某一 功能时只要调用对应的具体函数即可。
6
一段明文:SHUXUEJIANMOJINGSAI 命令 结果
function hill() IXQTEOBACPQSBABUU %输入密钥 disp('输入密钥(矩阵)的维数'); CAA n=input(''); disp('输入密钥(矩阵,按行输入)'); key=zeros(n,n); for j=1:n for k=1:n key(j,k)=input(''); end end d=det(key);%求矩阵的行列式 if d==0%判断矩阵是否可逆 error('密钥矩阵不可逆, 无法实现 Hill 密码 '); end %输入明文 message=input('输入明文 \n','s'); m=size(message); m=m(2); if mod(m,n)~=0 error('输入错误, 明文长度应为矩阵维数的 倍数'); end for i=1:m if message(i)>='A' && message(i)<='Z'
实验内容:Hilln 密码体系 内容: 一 实验目的 实现 Hilln 密码体系的关键环节(加密、解密、破译) 二 预备知识 熟悉 mod、det、find 等 Matlab 命令 三 实验内容与要求 实验内容与要求
(1)假设加密矩阵为 A=
1 2 ,用 MATLAB 编制程序,加密下面 0 3
相关文档
最新文档