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 密码作为一种简单易行的加密方法被广泛应用。

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密码的加密与解密_矩阵

加密过程 将明文变换成另一种不能被非授权者所
加密变换 将明文变为密文的变换
解密变换 将密文变为明文的变换
密 钥
加密变换所使用的参数
简单的加密解密过程模型
发送者 明文 加密器 密文
普 通 信 道
接收者
明文
解密器
窃听、干扰
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

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密码算法详解一、引言Hill密码算法是一种对称加密算法,早在20世纪早期就已经出现。

它是基于线性代数的群论中的一次同余方程的理论而设计的。

Hill密码算法的安全性依赖于求解一个大的二次或者更高次的一次同余方程组的困难性。

尽管Hill密码算法在当今的加密标准中已经被废弃,但是了解和学习它仍然具有很高的价值,因为它是许多现代加密算法的基础。

二、基本理论1. 线性代数基础:Hill密码算法涉及到一些线性代数的概念,包括向量空间、基、维度、线性变换等。

理解这些概念对于理解Hill密码算法至关重要。

2. 群论基础:Hill密码算法也涉及到群论的一些基本概念,如群、子群、同态、原像和象等。

群论是解决Hill密码算法的关键工具。

3. 一次同余方程:Hill密码算法的安全性基于求解大的一次同余方程组的困难性。

一次同余方程是数论的基本问题之一,也是现代密码学的基础。

三、Hill密码算法原理Hill密码算法的核心思想是将明文消息映射到密文消息,这个映射是通过一个密钥控制的线性变换来实现的。

具体来说,Hill密码算法包括以下步骤:1. 密钥生成:首先,需要生成一个密钥矩阵。

这个密钥矩阵是一个n×n的矩阵,其中n是明文消息的长度。

密钥矩阵的元素是随机选择的整数。

2. 加密过程:加密过程包括两个步骤。

第一步,将明文消息转换为一个n维的向量。

第二步,通过密钥矩阵对明文向量进行线性变换,得到密文向量。

3. 解密过程:解密过程与加密过程相反。

首先,通过密钥矩阵对密文向量进行逆线性变换,得到一个n维的向量。

然后,将这个向量转换回明文消息。

四、安全性分析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密码加密的密文破译姓名:谭周兴学号: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 密码1. 原理介绍希尔密码(Hill Cipher)是运⽤基本矩阵论原理的代替密码技术,由 Lester S. Hill 在 1929 年发明,26 个英⽂字母可表⽰成 0 ~ 25 的数字,将明⽂转化成 n 维向量,与⼀个 n × n 矩阵相乘后,得到的结果模 26,即可得到密⽂对应的值假设对明⽂ act 加密:a 为 0,b 为 1,t 为 19,对其进⾏向量化得到 M =[0,2,19]T 。

选取 3 × 3 阶矩阵密钥:6241131610201715加密过程如下:6241131610201715×0219=67222319=15147mod 26得到的密⽂为 pob解密时,必须先算出密钥的逆矩阵,再根据加密的过程做逆运算2. 矩阵求逆对于矩阵求逆,常见的有 伴随矩阵 和 ⾏变换 两种⽅法,不过需要注意的是,此处的逆矩阵为模 26 的逆矩阵,也就是所⾥⾯所有的运算(加减乘除)都是在模 26 下的运算2.1 利⽤伴随矩阵⼀个 n ×n 矩阵 A ,A 的逆矩阵 A −1 为 1d ⋅(C A )T 。

其中 d 是矩阵 A 的⾏列式,C A 是 A 的伴随矩阵,(C A )T 是 C A 的转置矩阵在求伴随矩阵的转置 (C A )T 的过程中,只使⽤了乘法与加减法运算, 并未使⽤特殊的除法运算,故算法过程与对⼀般矩阵求 (C A )T ⽆异,区别只在于每次运算时都需要模 26在求矩阵⾏列式 d 的时候,若是采⽤余⼦式法,则也与⼀般矩阵⽆异。

最后使⽤ 扩展欧⼏⾥得 算法判断逆元的存在性:若不存在逆元,则矩阵在模 26 条件下不可逆;若存在逆元,则结合上述求解出的 (C A )T 可计算出 A −12.2 利⽤⾼斯⾏变换(1) 先不考虑模 26 的条件根据求伴随矩阵的过程,有 A −1=1d ⋅(C A )T ,那么 (C A )T =dA −1。

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密码的加解密

Hill密码的加解密
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互素,则
HILL2密码的破译

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

若有 b1
a1 b3 a3 A A b2 a2 b4 a4

b1 b3 a1 A b2 b4 a2
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)
inva=
1.0000 0.6667 0 0.3333
%求矩阵a的行列式 %求矩阵a的逆矩阵
compa=deta*inva
compa= 3 2 0 1
%求矩阵a的伴随矩阵
ideta = 9
inva1=mod(ideta*compa, 26) inva1= 1 8
加密过程 将明文变换成另一种不能被非授权者所

实验十【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 Cipher 原理、解密及算法实现⼤部分均为转载,可以链接到原⽂地址查看,这⾥只是整合⽂章简介以下直接搬运原⽂,便于查看,也可以直接链接到原⽂地址查看ctf-wiki-Hill希尔密码(Hill )使⽤每个字母在字母表中的顺序作为其对应的数字,即 A=0,B=1,C=2 等,然后将明⽂转化为 n 维向量,跟⼀个 n × n 的矩阵相乘,再将得出的结果模 26。

注意⽤作加密的矩阵(即密匙)在 Zn26Z26n 必须是可逆的,否则就不可能解码。

只有矩阵的⾏列式和 26 互质,才是可逆的。

下⾯举⼀个例⼦明⽂:ACT将明⽂化为矩阵。

219假设密钥为:6241131610201715加密过程为:62411316102017150219≡67222319mod 26密⽂即为密⽂:POH -Hill该⽹站详细地介绍了Hill 密码,包括历史、运⽤等等但是在线的脚本只能⽀持 2 × 2 矩阵Decrypto在线⽹页C 语⾔实现解密算法相关题⽬ISCC 2015 base decrypt 150这⾥我们以 ISCC 2015 base decrypt 150 为例进⾏介绍,题⽬为密⽂: 22,09,00,12,03,01,10,03,04,08,01,17 (wjamdbkdeibr )使⽤的矩阵是 1 2 3 4 5 6 7 8 10请对密⽂解密.⾸先,矩阵是 3 × 3 的。

说明每次加密 3 个字符。

我们直接使⽤ Cryptool ,需要注意的是,这个矩阵是按照列来排布的。

即如下1 4 72 5 83 6 10参考WP :最后的结果为 overthehillx 。

[][][][][]Processing math: 100%。

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 这样就和原字符有很⼤的区别了吧。

Hill密码的加解密过程

Hill密码的加解密过程
输入明文I
输入明文N
输入明文G
H =2 15 7 20 8 13 6 19 10 3 21
11 16 1 18 13 2 3 4 3 1 21
ans =B
ans =K
ans =O
ans =P
ans =G
ans =A
ans =T
ans =R
ans =H
ans =M
ans =M
ans =B
ans =F
ans =C
ans =F
ans =U
ans =M
ans =U
ans =R
ans =E
ans =A
ans =I
ans =J
ans =I
ans =A
ans =T
ans =I
ans =N
ans =G中文意思为:关心父母,热爱家庭
2,已知密文与密钥,求对应的明文,如将上述的密文翻译成明文,设密钥为A=[1,1;0,3]
end
for n=1:11
D(1,n)=y(2*n-1);
D(2,n)=y(2*n);
end
H=mod(B*D,26);
for u=1:11
for v=1:2
setstr(H(v,u)+64)
end
end
输出的结果为:
ans =G
ans =U
ans =A
ans =N
ans =X
ans =I
ans =N
m=input('输入要加密的明文字母的个数');
if mod(m,2)==0
for i=1:m
a=input('输入明文','s');
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end
for n=1:11
D(1,n)=y(2*n-1);
D(2,n)=y(n);
end
H=mod(B*D,26);
for u=1:11
for v=1:2
setstr(H(v,u)+64)
end
end
输出的结果为:
ans =G
ans =U
ans =A
ans =N
ans =X
ans =I
ans =N
输入明文I
输入明文N
输入明文G
H =2 15 7 20 8 13 6 19 10 3 21
11 16 1 18 13 2 3 4 3 1 21
ans =B
ans =K
ans =O
ans =P
ans =G
ans =A
ans =T
ans =R
ans =H
ans =M
ans =M
ans =B
ans =F
ans =C
c(i)=abs(a)-64; end%将输入的字母转化为字母对应的数字,如A对应1
a=[c(1) c(3);c(2),c(4)];%明文的四个字母组成的对应矩阵
b=[c(5),c(7);c(6),c(8)];%密文的四个字母组成的矩阵
m=qiudao(c(5),c(7),c(6),c(8));%求矩阵b的逆矩阵,调用函数qiudao
ans =S
ans =D
ans =J
ans =C
ans =C
ans =A
ans =U
ans =U
总结,本次实验只是为了解决一个已知的问题而编的程序,但是是可以推广的,只需要修改几个参数就可以了,比方修改第三题的循环次数及A矩阵就可以对任意的明码进行加密,解密也一样。本实验的关键点在于如何解决求模的问题,只要此问题解决了,一切就迎刃而解。下面将任意输入的明文加密
functionf=qiudao(a,b,c,d)%矩阵的形式为[a,b;c,d]
h=a*d-b*c;%求矩阵的行列式
fori=1:26%求行列式的倒数
ifrem(i*h,26)==1break;
end
end
f=mod(i*mod([d,-b;-c,a],26),26)%其中[d,-b;-c,a]为伴随矩阵
end
A=[l(1),l(2);l(3),l(4)];
K=A*M;
H=mod(K,26)
for u=1:m/2
for v=1:2
setstr(H(v,u)+64)
end
end
elseif rem(m,2)==1
for i=1:m
a=input('输入明文','s');
c(i)=abs(a)-64;
c(m+1)=c(i);
ans =F
ans =U
ans =M
ans =U
ans =R
ans =E
ans =A
ans =I
ans =J
ans =I
ans =A
ans =T
ans =I
ans =N
ans =G中文意思为:关心父母,热爱家庭
2,已知密文与密钥,求对应的明文,如将上述的密文翻译成明文,设密钥为A=[1,1;0,3]
end
for j=1:(m+1)/2
M(1,j)=c(2*j-1);
M(2,j)=c(2*j);
end;
for n=1:4
l(n)=input('输入密钥,按照先行后列的顺序');
end
A=[l(1),l(2);l(3),l(4)];
K=A*M;
H=mod(K,26)
for u=1:(m+1)/2
for v=1:2
m=input('输入要加密的明文字母的个数');
if mod(m,2)==0
for i=1:m
a=input('输入明文','s');
c(i)=abs(a)-64;
end
for j=1:m/2
M(1,j)=c(2*j-1);
M(2,j)=c(2*j);
end;
for n=1:4
l(n)=input('输入密钥,按照先行后列的顺序');
ans =F
ans =U
ans =M
ans =U
ans =R
ans =E
ans =A
ans =I
ans =J
ans =I
ans =A
ans =T
ans =I
ans =N
ans =G
注意:在每输入一个数字或字符后都要按下回车键,进行下次输入
3、把一段明文加密,比方把上面的“REAIFUMUGUANXINJIATING”加密。假设密匙为A=[1,1;0,3]
因为本题是已知密文求明文,故需先求出密钥在模26下的逆矩阵。题中已知四个明文字母和四个密文字母β=A*α,故 =α* 可以求得密钥的逆矩阵
主程序为:(在运行主程序之前,请先运行函数文件)
for i=1:8
a=input('a=先输用来求密钥的明文对应的字母,再输入密文对应的字母,均为大写','s');
setstr(H(v,u)+64)
end
end
end
参考资料:《数学建模与实验》(陈恩水、王峰主编)56---60页Hill密码问题的加密、解密与破译;
《Matlab及其在数学上的应用》中关于数组矩阵的构造方法。
解此问题的关键在于求密钥的逆矩阵,调用qiudao函数,编程如下
for i=1:4
a(i)=input('输入密钥,按照先行后列的顺序')
end
B=qiudao(a(1),a(2),a(3),a(4));
for j=1:22
x=input('输入要翻译的密文','s');
y(j)=abs(x)-64;
将明文转化为密文就容易多了,因为已知密钥与明文,只需构造矩阵,在做矩阵乘法就可以了。
for i=1:22
a=input('输入明文','s');
c(i)=abs(a)-64;
end
for j=1:11
M(1,j)=c(2*j-1);
M(2,j)=c(2*j);
end;
A=[1,1;0,3];
K=A*M;
A=mod(a*m,26)%A为密钥的逆矩阵
for j=1:22
b=input('输入密文','s')
n(j)=abs(b)-64;
end;
for p=1:11;
L(1,p)=n(2*p-1);%将输入的密文字母转化为矩阵,矩阵第二行第一列的字母为输入的第二个字母
L(2,p)=n(2*p);
end; K=mod(A*L,26)
end;
end;
end;
得到模26的倒数表
1
3
5
7
9
11
15
17
19
21
23
25
1
9
21
15
3
19
7
23
11
5
17
25
2,一段Hill2密码编译的密文 BKOPGATRHMMBFCSDJCCAUU已知 SDJC 代表 IJIA 破译这段密码的内容
根据Hill密码解题的步骤,先求一个2阶矩阵的逆矩阵,定义一个函数qiudao如下,Matlab编程如下。
for j=1:11%因为输出字母的顺序为K(1,1),K(2,1),K(1,2),K(2,2)等的折线性
for i=1:2
setstr(K(i,j)+64)%将对应的数字转化为大写字母,输出结果
end
end所得的结果为ans =G
ans =U
ans =A
ans =N
ans =X
ans =I
ans =N
Hill密码的加解密过程
1,在求Hill密码加解密过程前,先求出模26的倒数表
根据模26倒数的定义如果a与b互为倒数,则a*b-1一定是26的整数倍,故可以用mod函数。
利用Matlab,编程如下:
for i=1:25
for n=1:26
ifrem((i*n-1),26)==0
disp([i;n]);
H=mod(K,26)
for u=1:11
for v=1:2
setstr(H(v,u)+64)
end
end
输出结果为:输入明文G
输入明文U
输入明文A
输入明文N
输入明文X
输入明文I
输入明文N
输入明文F
输入明文U
输入明文M
输入明文U
输入明文R
输入明文E
输入明文A
输入明文I
输入明文J
输入明文I
输入明文A
输入明文T
相关文档
最新文档