数学实验—Hill密码的加密、解密与破译
- 格式:pdf
- 大小:291.18 KB
- 文档页数:18
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 可用。
}
注意:其中的bs为各小矩阵的行列式的值。
以上两段代码为关于如何进行逆矩阵转换的具体实现。
4.输入与输出:
本算法的输入为如下三项:
a. 已知明密文对每对的字符个数;
b. 已知的明文对(若干);
c. 与之相对应的密文对。
本算法的输出为如下三项:
a. 行代换后的明文矩阵;
b. 明文矩阵的逆矩阵;
c. 最终解得的密钥矩阵K。
5.最终运行结果:
输入如下所述:
已知明密文对每对的字符个数:2
已知的明文:fr,与之相对的密文:PQ;
已知的明文:id,与之相对的密文:CF;
输出为下图所示:
出现的问题以及解决方案:
问题1:所做出的密钥矩阵K中元素的数值是小数。
解决方案:由于忽视了每次矩阵的mod26计算,造成了最终得出的密钥矩阵K中的小数。
只需对每一个被除数每次+26直到除尽即可。
最后统一进行mod 26直到最简。
hill密码加密例题Hill密码是一种基于线性代数的密码算法,它使用矩阵运算来进行加密和解密。
下面我将给出一个Hill密码加密的例题,并从多个角度进行全面解答。
假设我们要加密的明文是:"HELLO",并且我们选择使用2x2的密钥矩阵进行加密。
密钥矩阵可以表示为:K = [[2, 3],。
[1, 4]]现在,我们将按照Hill密码的加密步骤来进行加密:步骤1: 明文转化为数字。
首先,我们需要将明文转化为对应的数字。
通常可以使用字母表来进行映射,比如A对应0,B对应1,以此类推。
在这个例题中,我们使用A=0,B=1,C=2,...,Z=25的映射方式。
所以,"HELLO"可以转化为[7, 4, 11, 11, 14]。
步骤2: 分组。
然后,我们将数字分组,每个组的长度与密钥矩阵的行数相同。
在这个例题中,由于密钥矩阵是2x2的,所以我们将数字分组为[[7, 4], [11, 11], [14]]。
步骤3: 矩阵乘法。
接下来,我们将每个分组与密钥矩阵进行矩阵乘法运算。
对于每个分组,我们将其转化为一个行向量,并与密钥矩阵进行乘法运算。
在这个例题中,第一个分组[7, 4]与密钥矩阵K进行乘法运算,得到的结果为[2, 29]。
步骤4: 取模运算。
然后,我们对矩阵乘法的结果进行取模运算,通常取模26。
这是因为我们使用了26个字母的字母表。
在这个例题中,对于矩阵乘法的结果[2, 29],我们进行取模26运算,得到[2, 3]。
步骤5: 数字转化为密文。
最后,我们将取模运算的结果转化为对应的字母。
在这个例题中,[2, 3]对应的字母是"C"和"D"。
所以,加密后的密文为"CD"。
综上所述,使用2x2的密钥矩阵K对明文"HELLO"进行Hill密码加密后得到的密文为"CD"。
从多个角度来看,Hill密码的加密过程涉及到了线性代数的矩阵运算,包括矩阵乘法和取模运算。
(1). 破译以下Hill3体制的密文gvknipiwyhzrqfsmjbknsqfcdexpkrmspoducuqaixhmrdknscqydxhmryrzjijjmosfdnqtec xeikmsozzzlfnbspqaoipxaixmddorzxtsgnmmspqnemlirgeoslaqsbsplcsmfmegjixdbnxkt enixilqylelgzwplydxddvbfstzvyzjaqsxnfnptniilyreeeamdmjzwghjopvblfqlttbhnrnva思路分析:○1将密文输出成对应的ASCII码,减去97得到a~z范围为0~25,然后分成3*75的矩阵。
○2选取1*3矩阵[0 0 0]到[25 25 25]总共26*26*26个乘以上述矩阵并模26得到1*75的矩阵,统计0~25的个数记为O i(i为0~25)。
○3利用公式计算出g值,并对其进行由大到小排序,选出前50组对应的矩阵。
○4在这前50组中任取3组组成3*3矩阵(排除有约数有2和13的),右乘3*75矩阵,然后计算出0~25出现的频率(近似看成概率),根据统计规律比较,选出可能的明文。
○5从这些可能的明文中按照意义找出需要的明文。
字母统计规律程序代码如下:clc;clear all;fid=fopen('ciphertext.txt'); %打开要读的文本ciphertext=fread(fid)-97; %读取文本,并表示成0~25之间的数fclose(fid); %关闭文本A=reshape(ciphertext,3,75); %将明文矩阵重新排列成3*75的矩阵P=[8.167;1.492;2.782;4.253;12.702;2.228;... %统计概率矩阵2.015;6.094;6.966;0.153;0.772;4.025;...2.406;6.749;7.507;1.929;0.095;5.987;...6.327;9.056;2.758;0.978;2.360;0.150;...1.974;0.074]./100;G=zeros(17576,1); %记录g的值H=zeros(17576,3); %记录对应的矩阵for i=0:25 %用0~25产生26*26*26中矩阵for j=0:25for k=0:25B=[i j k];C=B*A;D=mod(C,26);O=zeros(26,1); %分别统计0~25的个数num=1;den=1;for m=1:26for n=1:75if D(n)==m-1O(m)=O(m)+1;endendnum=P(m)^O(m)*num; %计算分子den=factorial(O(m))*den;%计算分母endG(676*i+26*j+k+1,1)=num/den;H(676*i+26*j+k+1,:)=B;endendend[X,Y]=sort(G,'descend'); %Y表示按从大到小对应的下标M=Y(1:50); %找出前50大数对应的下标for i=1:50F(i,:)=H(M(i),:); %求出最大值所对应的矩阵Bendindex=nchoosek(1:10,3); %产生所取矩阵的行for i=1:120Q=[F(index(i,1),:);F(index(i,2),:);F(index(i,3),:)]; %得到可能的加密矩阵if (mod(det(Q),2)~=0)&&(mod(det(Q),13)~=0)plaintext=mod(Q*A,26);E=reshape(plaintext,225,1); %将可能的明文重排n=0:25;[R,S]=hist(E,n); %得到0~25出现的个数,R表示个数N=(R/length(plaintext))'; %计算出频率DIFF=P-N; %计算明文与统计规律之差V=DIFF.*DIFF./P; %计算差值的平方SUM=sum(V); %求差值平方的和Z(i,:)=SUM; %记录差值以及对应的矩阵endendK=find(Z(:)>0); %找出>0的J=[Z(K(:)),K];[x,y]=sort(J(:,1)); %x表示卡方由小到大排列,y保存卡方由小到大时对应的for i=1:5m=y(i);Q=[F(index(m,1),:);F(index(m,2),:);F(index(m,3),:)];plaintext=mod(Q*A,26);E=reshape(plaintext,225,1)+97;plaintext= fprintf('可能的plaintext(%d):\n%s\n',i,E);end执行结果:可能的plaintext(1): copebreaeiniisvhehosbimvorbannfosmozsesreeinvelrigincninvhehorbdtddaditvroeucus mschcoroannmumhmhreerurtwtrteyilfosmaziovthtnsaieiannthtsifteglileneeererrsgfeari nvlulncnupuntaepelilieiofoovornrenrsystighahneaerradachponoclcrxe可能的plaintext(2): codebreakingisthemostimportantformofsecretintelligenceintheworldtodayitproducesm uchmoreandmuchmoretrustworthyinformationthanspiesandthisintelligenceexertsgreati nfluenceuponthepoliciesofgovernmentsyetithasneverhadachroniclerxx可能的plaintext(3): cocebweaminiisshetoseimuorcansfolmocseyrevinielyigoncdinihexoredtvdanitirotuces mqchcorwanwmushmprevrultwhrtpyimfolmaqiosthnnsdieaanwthlsiateblirenoeeuerisg ieaainslujncdupinthepclifieaofeovernfenasystihhadneteryadgcheonaclmrxt可能的plaintext(4): cobebaeayinjistheyosdimhoroanafotmojsemretinweluiginceinwheyorodtrdasitironucus mcchnorbanamuihmoretrumtwcrtkyirfotmahiolthlnsxieeanathlsihteflieenleetergsgdeal inwlucnceuphntmepplieieeofdovjrnlenysyatinhaqnevergadtchaontclvrxs可能的plaintext(5): cdcerwekmigiitshmtoteipuotcatsfrlmfcscyrtvitielyieoneditihwxoledovdynipirdtueesuq cmcoewadwmcshoprtvrsltohrhpynmfrlmtqinstannpdisaadwtilsnatlblgrecoexuetisrietai fslejneduoinhheoclcfisaogeoeermfetasestthhsdnvtehyaagcreoiacemrxt根据意思合理性选出明文2为:code breaking is the most important form of secret intelligence in the world today .it produces much more and much more trust worthy information than spies and this intelligence exerts great influence upon the policies of governments .yet it has never had a chronicler. xx解密矩阵为:。
Hill密码加密的密文破译姓名:谭周兴学号:13091076明文:breathtaking密文:RUPOTENTOIFVHill密码:将明文的每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n 维向量,跟一个n×n的矩阵M相乘,再将得出的结果MOD26,得到密文。
密钥矩阵M必须是在Z26上可逆才能译码。
明文对应的数字:1,17,4,0,19,7,19,0,10,8,13,6密文对应的数字:17,20,15,14,19,4,13,19,14,8,5,21分析:一共有12位数字,则密钥矩阵可能是1*1、2*2、3*3、4*4、6*6、12*12(为12的因子)维的。
根据已有的明密文不能破译4*4及其以上的密钥矩阵,另外明文里面含有0,从而排除1*1的情况,因而考虑2*2阵和3*3阵。
1、2*2矩阵:将明文按行写成一些2*2矩阵,如A1=[11740],B=[17201514]。
A1M(mod26)=B,矩阵A1在实数域内是可逆矩阵,判断A1在Z26上是否可逆,计算det(A1)(mod 26)=10,与26不互素,故A1不可逆,M无法根据A1得到。
继续上述步骤,A2=[40197]。
计算det(A2)(mod 26)=2,与26不互素,故A2不可逆,M无法根据A2得到。
det(A3)(mod 26)=23,和M互素,如图计算A3的代数余子式A*=(detA)*A-1mod26(矩阵元素元素属于实数域)和A-1.A-1=A*|A|-1(这里的矩阵元素和行列式的逆属于Z26.|A|-1计算用如下代码即可:#include<stdio.h>void main(){int i,a;scanf("%d",&a);for(i=0;i<=25;i++){if((a*i)%26==1)break;}printf("%d",i);}算得M=[13 1;12 9]。