实验报告书-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。

  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
相关文档
最新文档