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密码加密解蜜时矩阵的求法
c =(t I t m + + z fm d 6 l 七l + 2 : L k m ) o 2 ,
C 2=(2 +k2 + +k, ) d 6 I ml 2m2 L 2 mo 2 m,
例 一 :如 取 =
l 1 2 3
6 4 6
令 =1
2 1l 3 8

0 1 b 2 3 d l 5 p 1 6 q 1 7 4
表 1
5 f l 8 6 g l 9 t 7 h 2 0 21 8 9 J 2 2 1 0 k 23 l l l 2 4 y 2 5 1 2
~~一 Hi 密码 快速 加 密和解 密。 。。实现 l 实 用 第~ 智 l 关 键词 :Hi 密码 ;加 密 ;解 密;Maa70 l l tb . l
1 引 言
在 计算 机 网络 中 ,为 了保 证 数 据 的 安 全 .常 常 要 对 数 据 进 行 加 密 和 解 密 。 对 数 据进 行加 密 的 方法 很 多 ,H l 密 码 是 其 中 i l
字 。并 令其 行 列 式 的 值 等 于正 一 或 负 一 .可得 一 个 二 元 一次 或 二 元 二 次不 定 方 程 , 求 其 正 整数 解 。 现举 几 例 加 以说 明 。 可
4 8 v 6 9
l ~ Hi 加 密 算 法 的 基 本 思 想 是 将 个 明 文 字 母 通 过线 性 变 换 . l 将 它们 转 换 为个 密 文 字母 。 解 密 只 要 作 一 次 逆 变 换 就 可 以 了 。 ~ 密 钥 就 是 变 换 矩 阵 本 身 。 即 设 明 文 为 M =m m … , l2 ,经 过 线 ~变 换 得 密 文 C= k㈣ = f.… ・J 性 E c 2 . C。 ~ 其 中 一

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密码-矩阵应用

13
信源 → 加密 → 信道 → 解密 → 信宿
1
1929年,希尔(Hill)通过矩阵理论对传输信息 年 希尔( 矩阵理论对传输信息 )通过矩阵理论 进行加密处理,提出了在密码史上有重要地位的希尔 进行加密处理,提出了在密码史上有重要地位的希尔 加密算法。下面我们介绍一下这种算法的基本思想。 加密算法。下面我们介绍一下这种算法的基本思想。 【准备】若要发出信息 action,现需要利用矩阵 准备】 , 乘法给出加密方法和加密后得到的密文, 乘法给出加密方法和加密后得到的密文,并给出相应 的解密方法。 的解密方法。
2
【假设】(1)假定 个英文字母与数字之间有以 假设】 )假定26个英文字母与数字之间有以 下的一一对应关系: 下的一一对应关系:
A վ 1
B վ 2
C վ 3
⋯ ⋯ ⋯
X վ 24
Y վ 25
Z վ 26
个字母分为一组, (2)假设将单词中从左到右,每3个字母分为一组, )假设将单词中从左到右, 个字母分为一组 并将对应的3个整数排成 维的行向量,加密后仍为3 个整数排成3维的行向量 并将对应的 个整数排成 维的行向量,加密后仍为 维的行向量,其分量仍为整数。 维的行向量,其分量仍为整数。
是事先约定的, 称为解密的钥匙 解密的钥匙, 可逆矩阵 A 是事先约定的,这个可逆矩阵 A 称为解密的钥匙, 或称为“密匙” ).即用 或称为“密匙” ).即用
1 −1 0 A −1 = 2 − 2 − 1 −1 1 1
从密码中恢复明码: 从密码中恢复明码:
1 −1 67 1 67 0 81 9 A−1 44 = 2 −2 −1 44 = 3 , A−1 52 = 15 43 −1 1 1 43 20 43 14

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密码算法原理

hill密码算法原理
Hill密码算法是一种基于线性代数的分组对称密码算法,它的
核心原理是将明文分成几个字母一组,然后利用矩阵乘法来实现加密和解密过程。

具体原理如下:
1. 密钥生成:选择一个正整数n,然后随机生成一个n×n的矩
阵K作为密钥矩阵。

2. 加密过程:
a. 将明文分组,每组n个字母。

如果最后一组不足n个字母,可以通过添加空格等方式补齐。

b. 将每个明文分组转换为一个列向量X,即向量X的每个元
素对应一个字母的数值,可以使用ASCII码表进行转换。

c. 对于每个明文向量X,进行矩阵乘法运算:C = K * X,其
中C为密文向量。

d. 将得到的密文向量C转换回字母形式。

3. 解密过程:
a. 将密文分组,每组n个字母。

b. 对于每个密文向量Y,进行矩阵乘法运算:X = K^-1 * Y,其中X为解密后的明文向量。

c. 将得到的明文向量X转换回字母形式。

需要注意的是,密钥矩阵K必须是可逆的,否则解密过程无
法正确进行。

同时,由于矩阵乘法运算的特性,对于某些明文分组,可能存在明文和密文相同的情况,这被称为"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密码

(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 密码的密文为

2x2 hill密码的实验原理

2x2 hill密码的实验原理

2x2 hill密码的实验原理
2x2 Hill 密码是一种基于矩阵运算的加密算法,它利用线性代数的原理对明文进行加密,从而保护通信数据的安全性。

具体实验原理如下:
1. 生成密钥矩阵:在2x2 Hill 密码中,密钥矩阵是一个2x2 的矩阵,其中每个元素都是不大于26 的正整数。

密钥矩阵可以由发送方随机生成或者事先共享给接收方。

2. 明文加密:明文可以是一个长度为2 的字母组合,例如AB、CD 等。

发送方在加密明文时,将明文转换为一个向量(2x1 的矩阵),然后将密钥矩阵与明文向量相乘,得到密文向量。

3. 密文传输:发送方将密文向量传输给接收方,接收方将其保存下来。

4. 密文解密:接收方在解密密文时,将密文向量与密钥矩阵的逆矩阵相乘,得到明文向量。

然后,将明文向量转换为明文,即完成解密过程。

总的来说,2x2 Hill 密码的加密和解密过程都是基于矩阵运算的。

发送方将明文向量与密钥矩阵相乘得到密文向量,接收方将密文向量与
密钥矩阵的逆矩阵相乘得到明文向量,从而完成解密过程。

实验中需要注意的是,密钥矩阵的生成和保存必须安全可靠,否则会影响到整个加密算法的安全性。

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密码算法是一种经典的密码算法,它采用矩阵运算来加密和解密数据。

该算法由美国数学家莱斯利·萨蒙·希尔于1929年发明,被广泛应用于信息安全领域。

在现代密码学中,Hill密码算法被认为是一种较为简单且易于实现的对称加密算法。

Hill密码算法的加密过程包括选择一个适当大小的密钥矩阵,将明文数据分组,并通过矩阵运算来对每个数据组进行加密。

解密过程则是通过逆矩阵运算来还原明文数据。

该算法的安全性取决于密钥矩阵的选取以及矩阵运算的复杂度。

然而,虽然Hill密码算法在理论上是安全的,但实际应用中存在一些缺陷。

首先,密钥矩阵的选择必须是非退化的,并且需要确保密钥矩阵的逆矩阵存在。

这就限制了Hill密码算法的密钥空间,使其容易受到穷举搜索等攻击。

此外,由于矩阵运算涉及到大量的数学计算,Hill密码算法在效率上存在一定的问题。

近年来,随着量子计算及深度学习等技术的发展,Hill密码算法的安全性也受到挑战。

量子计算可以在较短的时间内破解复杂度较高的矩阵运算,从而影响Hill密码算法的安全性。

同时,深度学习技术可以通过学习大量的数据样本来破译Hill密码算法所使用的密钥矩阵,使得该算法的加密效果变得不再可靠。

为了提高Hill密码算法的安全性,可以采取一些增强措施。

例如,可以结合其他加密算法来增加密码强度,或者采用更加复杂的矩阵运算方法来加密数据。

此外,定期更换密钥矩阵、增加密钥长度等方式也可以有效提升Hill密码算法的安全性。

梳理一下本文的重点,我们可以发现,Hill密码算法作为一种经典的密码算法,具有一定的加密效果和应用前景。

然而,在实际应用中需要注意该算法存在的一些安全风险,并采取相应的措施来提高其安全性。

希望未来能够通过技术的不断创新和发展,进一步加强Hill密码算法的安全性,使其更加适用于信息安全领域。

Hill密码的加密论文(内含matlab程序代码)

Hill密码的加密论文(内含matlab程序代码)

Hill密码的加密,解密与破译摘要对于问题1.1:本文采用Hill密码通信,对明文进行加密。

利用已知的密钥矩阵,2首先,将密文转化为对应表值数字。

其次,对密文的数字转化为矩阵。

最后,对明文解密。

对于问题1.2:本文给出一组明文和密文,二者满足构成密钥的条件,通过求解的到密钥,并进行问题1.1的解题过程破译这段密文。

Hill密码矩阵A,并求出该矩阵的值是否与26互素,加以对于问题2.1:本文给出4判断。

若互素则能成为密钥,否则不能构成密钥。

对于问题2.2:利用问题2.1所给的密码矩阵A,按照问题1.1的解题思路,将得到的密文解密。

Hill密码的密文和其对应的明文,通过检验二者是否对于问题2.3:本文给出一段4满足构成密钥的条件,若满足解的密钥,并写出求解过程;若不满足加以说明。

对于问题3:本文给出明文频数最高的字母TH和HE,及密文频数最高的字母RH和NI。

两两组合得到两组“密钥”,并检验它们是否满足构成密钥的条件,若满足则解除密钥。

Hill密对于问题4:本文给出频数最高的相邻明文字母KE和相邻密文字母LK,采用2码通信,利用所给字母与其他字母组合,构造2×2的矩阵,并检验是否满足构成密钥的条件,加以排除得到所要的密钥。

若有满足条件的矩阵,破译所给密文。

Hill密码通信,根据26个字母搭配出2×2的所有矩阵,利对于问题5:本文采用2用矩阵的值与26互质,加以排除不符合条件的矩阵,并求出满足条件的密钥,破译该段密文,再利用密文是否通顺加以排除,得到所要的明文和密钥。

关键字密钥 mod(26)逆 mod(26)倒数一、Hill2密码的数学模型的主要符号说明w Hill密钥的维数A 密钥矩阵S 明文Y 密文m 所用的表值编号YW 哑文二、Hill2密码的数学模型密码是一种传统的密码体制加密过程的具体步骤如下:Hill2(1)、根据明文字母的表值将明文信息用数字表示,设明文信息只需要26个拼音字母A~Z(也可能不止26个,如还有数字、标点符号等),通信双方给出这26个字母表值(见表10.1明文字母的表值)。

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条可能的明文,接下来就要考虑筛选的问题。

矩阵模运算与古典密码 Hill2 加密解密

矩阵模运算与古典密码 Hill2 加密解密
14
模 m 可逆
问题:是否 Zm 中所有的数都存在模 m 倒数?
a 存在唯一的模 m 倒数
a 与 m 无公共素数因子
命题:定义在集合 Zm 上的 n 阶方阵 A 模 m 可逆的充要条 件是:m 和 det(A) 无公共素数因子,即 m 与 det(A) 互素。
Hill2 密码的加密矩阵必须满足上述条件。
AB BA E(mod m) 则称 A 模 m 可逆, B 为 A 的 模 m 逆矩阵,记为
B A1(mod m)
定义 2:设 a Zm ,若存在 b Zm 使得 ab=1 (mod m) ,则
称 b 为 a 的 模 m 倒数 或乘法逆,记作 b = a-1 (mod m) 。
注: a , b 都是 Zm 中的数
16 12
(mod
26)
16 12
,
67 72
(mod
26)
15 20
,
27 12
(mod
26)
1 12
72 72
(mod
26)
20 20
.
9
Hill2 加密举例
反查字母表值得每个向量对应的字母组为:
16
12
,
1 12
,
15
18
Hill2 解密过程
设加密矩阵
A
1 0
2 3
| A | 3,
A
3 0
2
1
A1 (mod
26)
31
(mod
26)
3 0
2 1
(mod
26)
B A1(mod 26)
9
3 0
2
1
(mod
26)

实验十【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密码的加密、解密与破译信息与通信工程科技专业资料.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密码是⼀种简单的加密⼿段。

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

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

容易被穷举。

以下,我们都⽤英⽂字母举例,⽐较简单明了下⾯简要介绍⼀下加密过程⾸先,要将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)。

加密过程 将明文变换成另一种不能被非授权者所
加密变换 将明文变为密文的变换
解密变换 将密文变为明文的变换
密 钥
加密变换所使用的参数
简单的加密解密过程模型
发送者 明文 加密器 密文
普 通 信 道
接收者
明文
解密器
窃听、干扰
HILL2密码
明文分组(两个一组),按组转换成密文
同一字母在不同组中所对应密码不同
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
Mathematica: Eulerphi[m]
k
故所求 x为
( m)
1 (mod m)
x a ( m )1 (mod m)
aij Z m , 矩阵模 m 可逆 设 A aij nn 为 n 阶方阵, 若存在 B bij nn , bij Z m , 使得 AB E (mod m) ,称 B 为 A 的模 m逆矩 阵,记作 B A1 (mod m)
15 18 1 19 1 23 19 8 20 21 13 18 8 12 1 19 15 20
HILL2密码的破译

关键是求得加密矩阵的逆—解密矩阵 只要分析出两个明文向量(线性无关)与 相应的密文向量

若有 b1
a1 b3 a3 A A b2 a2 b4 a4
R 18 2 A 2 S 19
3 C 其中 2 15 O
20 3 21 18 A 1 15 3 19
计算A-1 21 18 det 1 2 (mod 26) 345(mod 26) 7 3 19
a –1(mod26) 1
21 15 3 19 7 23 11 5 17 25
怎样求模 m 倒数
即解方程
ax 1 (mod m)
定义 Euler 函数:
设 m 为一自然数,Zm中与m 互素的数的个 数称为m 的Euler 函数,记为 (m) 可借助软件 Euler 定理 对任意整数 k, m, 若k, m互素,则
i A i
1
关于模运算 (mon26)
模 m 等价 设 a , b为两个整数, 若 a b km, k Z 记作 a b(mod m) 称 a 模 m 等价于b, 剩余集
Zm {0,1, 2, , m 1} 称为模m的剩余集
设 a , b 为两个整数,
a b (mod m) a (mod m) b(mod m) (mod m)

b1 b3 a1 A b2 b4 a2
b1 A b2 b3 a1 b4 a2
a3 a4
a3 a4
1
一个破译例子
甲方截获了一段密文:OJWPISWAZUXAU
UISEABAUCRSIPLBHAAMMLPJJOTENH
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
1 2 A 0 3
加 密: 左乘加密矩阵 直接结果
57 44 37 35 25 25 57 38 60 63 39 54 24 36 3 57 45 60
一个简单实例
明 文: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
0 3 1 3
In[4]:= adja = deta inva Out[4]//MatrixForm=
3 2 0 1
In[5]:=ideta = 9
Out[5]= 9 In[6]:=inva1 = Mod[ideta adja, 26]; MatrixForm[inva1] Out[6]//MatrixForm=
明文:Clinton is going to visit a country in Middle East
实验任务
必做题 教材P 92-93 第1 , 2 , 3题
选做题 教材P 93 第 4题
密文:Kh lv wkh uxohu ri dqflhqw Urpd
明文:He is the ruler of ancient Roma
主要缺陷:字母出现频率不变
密码学名词
明 文 需要采用某种方法对其进行变换来隐蔽 它所载荷的信息或字符串 理解的隐蔽信息的消息或字符串的过程 密 文 明文经过加密过程的变换所得的消息或 字符串
数学实验
Hill 密码的加密、 解密与破译
上海交通大学
数学系
即使埃斯库罗斯被人们遗忘,阿 基米德仍会被人们记住,因为即使语 言文字会消亡,数学概念也不会消亡。 — G.H.Hardy 现代数学家象其他从事科学的人 们那样,在应用他们的原理方面化费 的心血比在了解这些原理方面多得多。 — G.B.Berkeley
1
1
破 译 密文向量
15 23 9 0 24 21 9 5 2 21 10 16 19 21 1 2119 1 1 3 18 9 12 8 1 13 12 10 15 5 8 19 16 2 1 13 13 16 10 20 14 8
密码的故事
战争和和平时期的间谍战
吕贝卡的故事-007的故事
基度山伯爵 (大仲马)
舞蹈人形
Conan Doyle 创作的歇洛克.福尔摩斯
这段符号的译文为 AM HERE ABE SLANE .
密码学 — Cryptography
源于希腊文字:秘密+书写,古老神秘的学科
目的
将信息传递给己方的接收者 防止敌方知道信息的内容 谁最先使用密码? Julius Caesar (恺撒)
1 8 0 9
In[7]:= b = {{5, 18, 11, 9, 25, 25, 5, 12, 8}, {11, 13, 2, 24, 10, 3, 5, 19, 8}}; c = Mod[inva1.b, 26]; MatrixForm[c] Out[7]//MatrixForm=
★ 选择一个加密矩阵 A —
二阶正整数值的矩阵Байду номын сангаас. 例如
1 2 A 0 3
★ 将明文字母依次按每两个字母一组查出其表
值,得到一组二维向量{ i }
★ 通过加密矩阵得到 { i },而 i
A i (mod 26)
★ 查向量i 的字母表值,即得到密文 ★ 利用加密矩阵的逆矩阵,由密文得到明文
明文向量 3 9 20 14 19 15 14 20 22 19 12 14 15 9 7 9 7 15 9 9
20 3 21 20 25 14 9 4 5 1 20 1 15 14 18 9 13 4 12 5 19 20
运算律
模 m 倒数
设 a Z m,若存在 b Z m 使得
ab 1(mod m),称 a 有模 m 倒数 1 b a (mod m) 记作
命 题
整数 a有模 m 倒数的充要条件为
a 与 m 无公共素因子
模 26 倒数表 a 1 3 9 5 7 9 11 15 17 19 21 23 25
密文向量
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
解 密
只要将解密矩阵
量,从而查出明文
左乘密文向量即可求得明文向
1 8 A (mod 26) 0 9
1
结 论
使用Hill密码时的加密矩阵应该模 26 可逆
使用Mathematica
In[1]:= a = {{1, 2}, {0, 3}}; MatrixForm[a] Out[1]//MatrixForm= 1 2 0 3 In[2]:= deta = Mod[Det[a], 26] Out[2]= 3 In[3]:= inva = Inverse[a]; MatrixForm[inva] 2 Out[3]//MatrixForm= 1
命 题
矩阵 A 模 m 可逆 | A | 与 m 无公共素 因子
1 1 *
模 m逆矩阵 A (mod m) | A | (mod m) A (mod m) 例 子
1 A 0
1
相关文档
最新文档