数学实验—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算法实验报告

}
注意:其中的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('输入密钥矩阵(按行输入)');

hill密码加密例题

hill密码加密例题

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密码的加密过程涉及到了线性代数的矩阵运算,包括矩阵乘法和取模运算。

实验报告书-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密码
称A为 模m可逆,B为A的模m 逆矩阵,记
--1
B=A (mod m)
12
例: A={ 0 3 }
18
B ={ 0 9 }
有AB = E(mod m)
--1
A可逆, A= B A模m可逆的判定:
A模m可逆的充要条件是,m和|A|没有公共素 数因子。
证明:如果ab=1(mod m)称a模m可逆,b
收到的加密消息。尽管加密消息的办法众所周知,但只
有那些指定的人才能解开它们。这种想法基于这样的事
实:存在数秒内能找到非常大的素数(譬如100位长) 以及使它们相乘的方法,但是,用已知的算法,即使用 最快的计算机也需要数年的时间来分解具有200位的整数。
(2)因此,收到这个消息的人,找到两个较大的素 数p和 q (p,q保密)。
找出元素属于Z26 的所有可能的Hill2 密码加密矩阵,若 截获了如下一段密文
UTCQCVFOYQUVMGMGULFOLEYHDUHOPEASWXTI
FBAMWT 且已知它是根据表1,且按 Hill2 密码体制加密,你能否将 其解密?
六:RSA公钥加密方案。 1:原理 (1)这是一种每个人都公开知道如何解开他或她所

72 mod 85=13 M
6:任务: (1):当n=85,r=3时用RSA方案确定发送电文
CHINA。 (2):当p=5,q=17,r=3时用RSA方案对接收52和
72解密。 (3):在RSA方案中,当p=5,q=17,r=5时,确定s
的值;问如取r=4来解密,能否可行?
m为1,r 的这个幂指数的前一个的幂 的 mod m就是s 。
4
3
例:r = 3 , m = 16 有3 = 1(mod 16) 则有s = 3

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 密码的加密、解密与破译

Z m = {0,1, 2,⋯ , m − 1} 称为模m的剩余集
设 a , b 为两个整数,
a + − b (mod m) × + − b(mod m) (mod m) ×
简单的加密解密过程模型
发送者 明文 加密器 密文
普 通 信 道
接收者
明文
解密器 窃听、干扰
HILL2密码
明文分组(两个一组),按组转换成密文 同一字母在不同组中所对应密码不同
HILL2密码的加密与解密
★ 假设要加密的明文是由26个字母所构成 ★ 将每个明文字母与 0 – 25 的一个数字建立
1–1对应关系,称为明文字母的表值
21 18 (mod 26) = 15 ⋅ 19 −18 (mod 26) −3 21 3 19 25 16 = 7 3
−1
20 3 21 18 1 17 A = (mod26) = 1 15 3 19 0 9
★ 通过加密矩阵得到 {β i },而 β i
1 2 A= 0 3
★ 将明文字母依次按每两个字母一组查出其表
= Aα i (mod 26)
★ 查向量βi 的字母表值,即得到密文 ★ 利用加密矩阵的逆矩阵,由密文得到明文
αi = A βi
−1
关于模运算 (mon26)
模 m 等价 设 a , b为两个整数, 若 a − b = km, k ∈ Z 记作 a = b(mod m) 称 a 模 m 等价于b, 剩余集 运算律
密文向量
5 18 11 9 25 25 5 12 8 11 13 2 24 10 3 5 19 8

hill密码

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密码加密的密文破译

Hill密码加密的密文破译

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]。

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

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

⎡8 6 9 5⎤
⎢ ⎢
6
9
5
10⎥⎥
⎢5 8 4 9⎥
⎢⎣10
6 11
4
⎥ ⎦
计算机求解
设置明文字母表后,选择【根据明文密文求解加密矩阵…】,选择【Hill4 (4*4)矩阵】,输 入明文 DELAYOPERATIONSU,密文 JCOWZLVBDVLEQMXC,单击【求解加密矩阵】,在左下角可 以得到加密矩阵:
(3)理论计算
由于求解四阶的加密矩阵需要四组线性无关的明文向量和密文向量。所以原问题就是判断 所给的明文和密文所对应的列向量组是否线性相关。 先根据表值写出明文对应的列向量:
⎛ 25 ⎞
⎜ ⎜
2
⎟ ⎟
⎜3⎟
⎜ ⎝
1
4
⎟ ⎠
⎛9⎞
⎜ ⎜
1
6
⎟ ⎟
⎜17 ⎟
⎜ ⎝
2
3
⎟ ⎠
⎛ 20 ⎞
⎜ ⎜
17
⎟ ⎟
⎜16 ⎟
⎡8 6 9 5⎤
⎢ ⎢
6
9
5
10⎥⎥
⎢5 8 4 9⎥
⎢⎣10
6 11
4
⎥ ⎦
第三题
理论计算
找出RH NI对应的列向量为:
与TH HE对应的列向量为:
⎛⎜⎝177⎞⎟⎠,
⎛13⎞ ⎜⎝8⎟⎠
⎛⎜⎝179 ⎞⎟⎠,⎛⎜⎝ 74 ⎞⎟⎠
由出现的频率统计可知有两种可能:THHE→RHNI,THHE→NIRH
利用上面的表值与加密矩阵给此明 文加密,并将得到的密文解密,画出加密与解 密过程的框图并编写相应的计算机程序。 (3)已知在上述给定表值下的一段 Hill4 密码的密文为

数学实验-希尔密码的破译

数学实验-希尔密码的破译

数学实验:希尔密码的破译一、问题重述:找出元素属于Z(26)的所有可能的Hill密码加密矩阵,若截获了如下一段密文:CKYNOHKQMAXJQBHAZWUHDAOQWXIPQZBKMPUTIPVSWSBYXKKWQHADMBDM且知道它是根据表10.1按Hill(2)密码加密的,你能否将他解密?二、基本思路:(1)先穷举列出所有可以作为解密矩阵的矩阵,然后依次解密得到明文对应的数字矩阵,通过程序运行可以得到明文(2)通过频率统计攻击不符合要求的明文进行筛选,得到符合要求的明文,然后进行人工选择即可。

三、解答:1、将字母转化为数字矩阵。

我们通过matlab编程实现,代码如下:function [Z] = zimu_shuzi(X,a)%a是字符串长度除以2X=strrep(X,'Z','@');Y=abs(X)-64;for i=1:aZ(:,i)=Y(1,2*i-1:2*i)';endZ=mod(Z,26);%此程序经检验无误。

End经过此程序后我们得到2、将此值赋给C,对C应用程序暴力破解,其代码如下:function[]= Copyblpj_hypy(a,d,C)%输入解密矩阵的第一个元素a,密文长度的一半d,及密文矩阵。

for b=0:25for i=0:25for j=0:25X=[a,b;i,j];D=det(X);D=round(D);if gcd(D,26)~=1elseH=mod(X*C,26);D=0;for k=1:dD(1,2*k-1:2*k)=H(:,k)';endD=mod(D,26);M=char(D+64);M=strrep(M,'@','Z');%由于表10-1中Z的值域ascii码不能应用其他字母的对应关系,所以先用替换的方法换成@保证程序正确运行ifsize(strfind(M,'I'),2)>=3&&size(strfind(M,'N'),2)>=3&&size(strfind(M, 'D'),2)<=2&&size(strfind(M,'C'),2)<=2&&size(strfind(M,'L'),2)<=2&&siz e(strfind(M,'Q'),2)<=2&&size(strfind(M,'K'),2)<=2&&size(strfind(M,'V' ),2)==0%通过汉语拼音的频率来攻击、筛选。

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密码加解密
明文分组(两个一组),按组转换成密文 同一字母在不同组中所对应密码不同
HILL2密码的加密与解密
★ 假设要加密的明文是由26个字母所构成 ★ 将每个明文字母与 0 – 25 的一个数字建立
1–1对应关系,称为明文字母的表值
字母 A B C D E F G H I J K L M 表值 1 2 3 4 5 6 7 8 9 10 11 12 13 字母 N O P Q R S T U V W X Y Z 表值 14 15 16 17 18 19 20 21 22 23 24 25 0
b3
b4
A
a3 a4
b1
b2
b3 b4
A
a1 a2
a3
a4
A
b1 b2
b3 a1
b4
a2
a3 1
a4
一个破译例子
甲方截获了一段密文:OJWPISWAZUXAU UISEABAUCRSIPLBHAAMMLPJJOTENH
经分析这段密文是用HILL2密码编译的,且这段 密文的字母 UCRS 依次代表了字母 TACO,若 明文字母的表值如前,试破译这密文的内容?
设a Zm,若存在 b Zm 使得
ab 1(mod m),称 a 有模 m 的逆 记作 b a1(mod m)
整数 a有模 m 逆元的充要条件为 a 与 m 无公共素因子
模 26 倒数表----如何得出?
a
1 3 5 7 9 11 15 17 19 21 23 25
a –1(mod26) 1 9 21 15 3 19 7 23 11 5 17 25
20
加 密: 左乘加密矩阵 A 1 2
0 3
直接结果
57 4437 35 25 25 57 38 60

实验十【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密码的加解密

一个简单实例
明 文:Our marshal was shot
补充哑字母
分 组: ou rm ar sh al wa ss ho tt
对应向量
15 18 1 19 1 23 19 8 20 21 13 18 8 12 1 19 15 20
密文向量
5 18 11 9 25 25 5 12 8 1113 2 24 10 3 5 19 8
密 文
ek rm kb ix yj yc ee ls hh
数学实验
Hill 密码的加密、 解密与破译
即使埃斯库罗斯被人们遗忘,阿 基米德仍会被人们记住,因为即使语 言文字会消亡,数学概念也不会消亡。 — G.H.Hardy 现代数学家象其他从事科学的人 们那样,在应用他们的原理方面化费 的心血比在了解这些原理方面多得多。 — G.B.Berkeley
密码的故事
加密过程 将明文变换成另一种不能被非授权者所
加密变换 将明文变为密文的变换
解密变换 将密文变为明文的变换
密 钥
加密变换所使用的参数
简单的加密解密过程模型
发送者 明文 加密器 密文
普 通 信 道
接收者
明文
解密器
窃听、干扰
HILL2密码
明文分组(两个一组),按组转换成密文
同一字母在不同组中所对应密码不同
1 2 A 0 3
加 密: 左乘加密矩阵 直接结果
57 44 37 35 25 25 57 38 60 63 39 54 24 36 3 57 45 60

Hill密码的加密、解密与破译信息与通信工程科技专业资料.ppt

Hill密码的加密、解密与破译信息与通信工程科技专业资料.ppt

❖ 借助线性代数的一些运算可以求得密钥这段密文的明文为 DONGNANDAXUEBAINIANXIAOQINGJINIAN。

用数字表示,明文信息可以由26个

拼音字母A~Z表示,也可以不止
过 程 的
26个字母,可以含数字或符号。通 信双方事先约定它们的表值。

体Байду номын сангаас
选择一个二阶可逆整数矩阵A,

称为Hill2密码的加密矩阵,

它是这个加密体系的“密
钥”。



将明文字母依次逐对分组,Hill2密码的加

密矩阵为二阶矩阵,则明文字母2个一

组,(Hilln是n个字母分成一组),若最后

一组字母数不足,则补充一些没有实际

意义的哑字母,这样使每一组都由2个

字母组成,查出每个明文字母的表值,构

成一个向量 。


过 程
A乘以 ,得一新的2维列向量 Aa,由
的 的两个分量反查字母表值得到的两

个字母即为密文字母。



例如 明文为 SHUXUEJIANMOJINGSAI , 加密矩阵为A= 10 32 。
密文为
IX QT EO BA CP QS BA BU UC AA 在查字母表时利用了模运算概念 关于模运算有如下运算律
a1
a2
(mod
m)
a1 (mod
m)
a2
(mod
m)(mod
m)
*
*
模运算意义下的矩阵逆概念
❖ 定义1 对于一个元素属于集合Gm的n阶方阵A,若 存在一个元素属于Gm的方阵B,使得 A B=B A=E(mod m) 则称A为模m可逆,B为A的x1 模m的逆矩阵,记为 B= A1(mod)。

实验十【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密码的加密,解密和简单破译Hill密码是⼀种简单的加密⼿段。

优点是: 可以实现同⼀个字母在不同的上下⽂中,对应密⽂中不同的字母。

缺点是: 加密前明⽂是⼏个字母,加密后还是⼏个字母。

容易被穷举。

以下,我们都⽤英⽂字母举例,⽐较简单明了下⾯简要介绍⼀下加密过程⾸先,要将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:13n: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其次,确定密钥,在这⾥其实就是加密矩阵,Hill2密码对应的是⼀个⼆阶矩阵,Hill n密码对应的就是⼀个N接矩阵了,我们这⾥取⼆阶,⽐较简单。

如:取个加密矩阵 A=(1 2;0 3) 说明:⼤家凑合着看啊,其实是 1 2是⼀⾏,0 3是⼀⾏。

画个矩阵太⿇烦了以下说明,矩阵⾥加了分号就表⽰换⾏哈有了字母编号表和密钥就万事具备了。

我们来将下⾯⼀段字母加密woshigetiancai⾸先,将字母两两分组 wo ,sh, ig, et, ia, nc, ai。

这⾥刚好是偶数个字母,如果是奇数个,就重复⼀次,最后⼀个字母,凑成偶数。

其次,查询字母标号表,将分好组的字母,写成向量形式,其实就是写成⼀个1*2的矩阵(我就讨厌,那些书,明明就是个1*2矩阵,偏偏要要定义成向量,增加⽆谓的概念):如w 对应 23,o对应15,写成向量(23;15)(这个是竖着写的,实在不好意思,矩阵实在不太好画,⼿头没matlab)以此类推,得到7组向量,分别是wo对应的(23;15) sh对应的(19;8) ig对应的(9;7) et对应的(5;20) ia对应的(9;1) nc对应的(14;3) ai对应的(1;9)将这些向量分别左乘密钥注意:这⾥矩阵这个东西⽐较⿇烦,不符合乘法交换律,两个矩阵左乘和右乘的结果是不⼀样的左乘就是将密钥放到左边,右边是向量 A*P(向量)⼜得到7组向量,分别是(38;45),(27;24),(16;24),(25;60),(10;3),(17;9),(10;27)这时候,我们就遇到了⼀个问题,我们定义的字母标号表是 0~25的,这⾥⼜是45 ,⼜是 60的,怎么办??没关系,遇到⽐25⼤的,我们就减26 知道,让数字落在 0~25之间就可以了例如原向量 (38;45)我们就变成了 (12;19),这样就落在我们的字母标号表⾥了,很简单吧以此类推,最后得到的 7组向量就变成了(12;19),(1;24),(14;24),(25;8),(10;3),(17;9),(10,1)最后再将数字通过字母标号表对照过来就可以了这⾥是 lsaxnxyhjcqija 这样就和原字符有很⼤的区别了吧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将字母转化为数字: function Y=letter_num(X) %按照数学实验书 P111 表 10.4 将字母转化为数字 %参数说明,输入项:X 由每个字母组成的字符串 % 输出项:Y 由每个数字组成的行向量 %例如 A B C D 对应的数字是 5 23 2 20 %其调用格式为:Y=letter_num('ABCD'). n=length(X); if rem(X,2)~=0 X(n+1)=X(n); n=n+1; end Y=zeros(1,n); for i=1:n if X(i)=='A' Y(i)=5; elseif X(i)=='B' Y(i)=23; elseif X(i)=='C' Y(i)=2; elseif X(i)=='D' Y(i)=20; elseif X(i)=='E' Y(i)=10;
二、 建立数学模型 2.加密过程:
黔南民族师范学院数学实验报告
(1).根据所给的明文把其进行依次逐对分组,然后再根据所给字母表值 写成一个数据的二阶矩阵 如 I 18 的形式,如果最后一组只有一个字母
H 4
则补充一个没有意义的哑字母。 ( 2 ) . 选 择 A1 作 为 加 密 矩 阵 即 加 密 矩 阵 的 密 钥 , 然 后 用
明文 加密矩阵 密文 普通信道 敌方截获 加密矩阵的逆矩阵 明文
3. (1).把所截获的密文 SDJC 进行依次逐对分组,然后再根据所给字母表值 写成数据的二阶矩阵 1 : D 4
I 9 IJIA 的矩阵 1 : J 2 10 I 9 A 1 x2 所有按解密过程有 B * 1 1 和 B * 2 2 x4 S 19 J 10 2 : C 再给出对应明文 3
黔南民族师范学院数学实验报告 Y(i)=9; else error('请正确输入 A 到 Z 的字母') end end end function Y=letter_num(X) %按照数学实验书 P111 表 10.4 将字母转化为数字 %参数说明,输入项:X 由每个字母组成的字符串 % 输出项:Y 由每个数字组成的行向量 %例如 A B C D 对应的数字是 5 23 2 20 %其调用格式为:Y=letter_num('ABCD'). n=length(X); if rem(X,2)~=0 X(n+1)=X(n); n=n+1; end Y=zeros(1,n); for i=1:n if X(i)=='A' Y(i)=5; elseif X(i)=='B' Y(i)=23; elseif X(i)=='C' Y(i)=2; elseif X(i)=='D' Y(i)=20; elseif X(i)=='E' Y(i)=10; elseif X(i)=='F' Y(i)=15; elseif X(i)=='G' Y(i)=8; elseif X(i)=='H' Y(i)=4; elseif X(i)=='I'
验证矩阵 Ai(i = 1; 2; 3; 4)能否作为 Hill2 密码体制的加密矩阵. 2. 设明文为 HILL CRY PTOGRAPHIC SY STEM IS TRADITIONAL 利用上面的表 值, 任选一个加密矩阵 Ai 给此明文加密, 并将得到的密文解密. 画出加密与解密过程 的框图并编写相应的 Matlab 程序. 3.
- II -
Hill 密码的加密、解密与破译
可以判断,A1 和 A4 能作为加密矩阵。 2、2
求倒数的程序:
function b=Hill2_countdown(a) %在 mod 26 情况下求倒数 % if a==1 b=1; elseif a==3 b=9; elseif a==5 b=21; elseif a==7 b=15; elseif a==9 b=3; elseif a==11 b=19; elseif a==15 b=7; elseif a==17 b=23; elseif a==19 b=11; elseif a==21 b=5; elseif a==23 b=17; elseif a==25; b=25; else error('该数在 mod 26 下没有倒数')
黔南民族师范学院数学实验报告
end end
判断矩阵 A 是否为加密矩阵并求其逆矩阵:
function A1=Hill2_key(A) %判断 A 矩阵是否能作为加密矩阵并求逆矩阵 a=mod(det(A),26); if a==13|rem(a,2)==0 error('A 矩阵不能作为加密矩阵') end b=Hill2_countdown(a); A1=mod((b*[A(2,2) -A(1,2);-A(2,1) A(1,1)]),26); end
- IV -
Hill 密码的加密、解密与破译 elseif X(i)=='F' Y(i)=15; elseif X(i)=='G' Y(i)=8; elseif X(i)=='H' Y(i)=4; elseif X(i)=='I' Y(i)=18; elseif X(i)=='J' Y(i)=25; elseif X(i)=='K' Y(i)=0; elseif X(i)=='L' Y(i)=16; elseif X(i)=='M' Y(i)=13; elseif X(i)=='N' Y(i)=7; elseif X(i)=='O' Y(i)=3; elseif X(i)=='P' Y(i)=1; elseif X(i)=='Q' Y(i)=19; elseif X(i)=='R' Y(i)=6; elseif X(i)=='S' Y(i)=12; elseif X(i)=='T' Y(i)=24; elseif X(i)=='U' Y(i)=21; elseif X(i)=='V' Y(i)=17; elseif X(i)=='W' Y(i)=14; elseif X(i)=='X' Y(i)=22; elseif X(i)=='Y' Y(i)=11; elseif X(i)=='Z'
黔南民族师范学院
数学实验报告
题目
Hill 密码的加密、解密与破译
制作成员
李成燕 黎庭庭 孙礼磊
班级
学号 1105015152
任务
问题求解和程序设计 流程 建立数学模型 上机实Fra bibliotek结果的分析 与结论
11 数应(1) 班
110501535 1105015119
2013 年 5 月 26 日
Hill 密码的加密、解密与破译
- VI -
Hill 密码的加密、解密与破译 Y(i)=18; elseif X(i)=='J' Y(i)=25; elseif X(i)=='K' Y(i)=0; elseif X(i)=='L' Y(i)=16; elseif X(i)=='M' Y(i)=13; elseif X(i)=='N' Y(i)=7; elseif X(i)=='O' Y(i)=3; elseif X(i)=='P' Y(i)=1; elseif X(i)=='Q' Y(i)=19; elseif X(i)=='R' Y(i)=6; elseif X(i)=='S' Y(i)=12; elseif X(i)=='T' Y(i)=24; elseif X(i)=='U' Y(i)=21; elseif X(i)=='V' Y(i)=17; elseif X(i)=='W' Y(i)=14; elseif X(i)=='X' Y(i)=22; elseif X(i)=='Y' Y(i)=11; elseif X(i)=='Z' Y(i)=9; else error('请正确输入 A 到 Z 的字母')
(2).设一个二阶矩阵 B=
x1 x3
即有
19 x1 4 x 2 9 19 x3 4 x 4 10

10 x1 3 x 2 9 10 x3 3 x 4 1
然后解出结果后模掉 26 得出 B 即解密矩阵。 (3) .按照求出的 B, 把密文分组然后再根据所给字母表值写成一个数据 的二阶矩阵,然后左乘以 B 就可以得到明文。 三、 问题求解和程序设计流程 2、1 分别计算 4 个矩阵行列式的值为:3,22,4,21
Hill 密码的加密、解密与破译(A)
一、 实验目的
1. 复习线性代数, 矩阵, 线性空间与线性变换等概念和运算. 2. 熟悉 Hill 密码体制的加密, 解密和破译过程. 3. Hill 密码体制的加密, 解密和破译过程的 Matlab 编程实践.
实验问题
Hill2 密码的加密, 解密和破译 1.利用所介绍的 Hill2 密码体制原理, 根据给定的 26 个英文字母的乱序表值(表 A1) 表 A1: 26 个英文字母的乱序表值
相关文档
最新文档