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

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密码是古典密码中多表代换密码部分的重要⼀环,以下的介绍节选⾃百度,想要深⼊了解的请查阅书籍补充相关知识。
原理:希尔密码(Hill Password)是运⽤基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。
每个字母当作26数字:A=0, B=1, C=2...⼀串字母当成n维向量,跟⼀个n×n的矩阵相乘,再将得出的结果模26。
注意⽤作加密的矩阵(即密匙)在\mathbb_^n必须是可逆的,否则就不可能译码。
只有矩阵的和26,才是可逆的。
需要的知识储备:1)线性代数基础知识.2) 基础知识.约定:1)希尔密码常使⽤Z26字母表,在此贴中,我们也以Z26最为字母表进⾏讲解.在附带源码中有两种字母表选择.2) ⼤家都知道最⼩的质数是2,1 既不是质数也不是合数. 在此我们定义1对任何质数的模逆为其本⾝.因为对于任意质数n,有: 1*1 % n = 1 的. 也应该是很好理解的.过程:1)加密:密⽂=明⽂*密钥矩阵(注:明⽂要被分割成与密钥维数相同的⼀维⾏列式)2)解密:明⽂=密⽂*密钥矩阵的逆(注:要求与加密过程相同)加密解密过程如下图:例:加密过程:解密:对上述过程进⾏编程,主要的函数声明如下:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25/*** 头⽂件名称:hillcrypto.h* 实现⽂件名称:hillcrypto.cpp* 项⽬名称:多表代换密码之hill密码* 作者:邹明* 完成时间:2016.3.14**/#ifndef __HILLCRTPTO_H__#define __HILLCRTPTO_H__#include<iostream>using namespace std;#include<assert.h>#include <iomanip>#define ROW 4 //密钥⾏数为4#define COV 4 //密钥列数为4void InputKeys(float keys[ROW][COV]); //输⼊密钥void InputWords(char*words); //输⼊明⽂void InputObwords(char*words); //输⼊密⽂void PopKeys(float keys[ROW][COV]); //输出密钥void Encryption(float keys[ROW][COV], char*words, char*crypto); //明⽂加密2526 27 28 29 30 31 32 33void Encryption(float keys[ROW][COV], char*words, char*crypto); //明⽂加密void Decode(float keys[ROW][COV], char*words, char*crypto); //密⽂解密bool Gauss(float A[ROW][COV], float B[ROW][COV], int n); //⾼斯消去法求逆矩阵void ObMatrix(float a[ROW][COV], float b[ROW][COV], int n); //求密钥逆矩阵void menu(); //菜单#endif函数实现过程中的主函数实现以及菜单函数实现如下:12345 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56/* 实现⽂件名称:hillcrypto.cpp */#include"hillcrypto.h"int main(){menu(); //菜单+选择system("pause");return0;}void menu(){float keys[ROW][COV] = { 8, 6, 9, 5, 6, 9, 5, 10, 5, 8, 4, 9, 10, 6, 11, 4 }; //加密矩阵(默认密钥) float obkeys[ROW][COV] = { 0 }; //解密矩阵(密钥逆矩阵)char words[100] = { 0 };char crypto[100] = { 0 };char obwords[100] = { 0 };bool flag = true; //菜单选择bool chose = false; //密钥选择char cn = 0;while(flag){int n = 0;cout << endl;cout << "\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;cout << "\t\t\t1.输⼊密钥"<< endl;cout << "\t\t\t2.明⽂加密"<< endl;cout << "\t\t\t3.密⽂解密"<< endl;cout << "\t\t\t4.退出"<< endl << endl;cout << "\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;cout << "请选择->:";cin >> n;switch(n){case1:system("cls");cout << "默认密钥为:";PopKeys(keys);cout << "请问您要重新输⼊密钥? y/n"<< endl << "请选择->:";cin >> cn;if((cn == 'y') || (cn == 'Y')){InputKeys(keys); //输⼊密钥}else if((cn == 'n') || (cn == 'N')){cout << "感谢您选择使⽤默认密钥!"<< endl;}elsecout << "输⼊有误,请重新选择!"<< endl;system("pause");break;case2:system("cls");InputWords(words); //输⼊明⽂Encryption(keys, words, crypto); //加密cout << "密⽂是->:"<< crypto << endl;56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 cout << "密⽂是->:"<< crypto << endl;system("pause");break;case3:system("cls");InputObwords(crypto); //输⼊密⽂ObMatrix(keys, obkeys, COV); //计算解密矩阵 Decode(obkeys, obwords, crypto); //解密cout << "明⽂是->:"<< obwords << endl;system("pause");break;case4:system("cls");cout << endl << endl << endl;cout << setw(15) << "谢谢使⽤!"<< endl;flag = false;system("pause");break;default:cout << "选择有误,请重新选择!"<< endl;system("pause");break;}}}输⼊明⽂函数和输⼊密⽂函数:123456 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40void InputWords(char*words) //输⼊明⽂{assert(words);cout << "请输⼊明⽂:";char*start = words;int flag = 1;getchar();while(flag){*words = getchar();words++;if(*(words - 1) == '\n'){*words = '\0';flag = 0;}}words = start;while(*start){if(('A'<= *start) && (*start <= 'Z')){*words = *start;words++;}else if(('a'<= *start) && (*start <= 'z')) {*words = *start - 32;words++;}start++;}*words = '\0';cout << "输⼊成功!"<< endl;}void InputObwords(char*words) //输⼊密⽂{assert(words);cout << "请输⼊密⽂:";char*start = words;40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 char*start = words;int flag = 1;getchar();while(flag){*words = getchar();words++;if(*(words - 1) == '\n'){*words = '\0';flag = 0;}}words = start;while(*start){if(('A'<= *start) && (*start <= 'Z')){*words = *start;words++;}else if(('a'<= *start) && (*start <= 'z')) {*words = *start - 32;words++;}start++;}*words = '\0';cout << "输⼊成功!"<< endl;}输⼊密钥与输出密钥函数:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26void InputKeys(float keys[ROW][COV]) //输⼊密钥{cout << "请输⼊密钥:"<< endl;for(size_t i = 0; i < ROW; i++){cout << "请输⼊第"<< i << "⾏密钥("<<ROW<<"个数):"; for(size_t j = 0; j < COV; j++){cin >> keys[i][j];}}cout << "输⼊成功 !"<< endl;}void PopKeys(float keys[ROW][COV]) //输出密钥{cout << "密钥为:"<< endl;for(size_t i = 0; i < ROW; i++){for(size_t j = 0; j < COV; j++){cout << keys[i][j] << " ";}cout << endl;}}加密函数:123 4 5void Encryption(float keys[ROW][COV], char*words, char*crypto) //加密函数{assert(words);int len = strlen(words);5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 int len = strlen(words);char*start = words;while(len > 0){int matrix[ROW] = { 0 };for(int i = 0; i < ROW; i++){if(*start)matrix[i] = *start - 'A';elsematrix[i] = 0;start++;}len -= ROW;int cry[ROW] = { 0 };for(int i = 0; i < ROW; i++){int temp = 0;for(int j = 0; j < COV; j++){temp = matrix[j] * keys[j][i] + temp; }cry[i] = temp % 26;*crypto = 'A'+ cry[i]; //计算密⽂crypto++;}}}解密函数,以及求逆矩阵函数:1234567891011 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39void Decode(float obkeys[ROW][COV], char*words, char*crypto)//解密函数{assert(crypto);int len = strlen(crypto);char*start = crypto;while(len > 0){int matrix[ROW] = { 0 };for(int i = 0; i < ROW; i++){if(*start)matrix[i] = *start - 'A';elsematrix[i] = 0;start++;}len -= ROW;int cry[ROW] = { 0 };for(int i = 0; i < ROW; i++){int temp = 0;for(int j = 0; j < COV; j++){temp = matrix[j] * obkeys[j][i] + temp;}cry[i] = temp % 26;*words = 'A'+ cry[i]; //计算明⽂words++;}}}39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107void ObMatrix( float a[ROW][COV], float b[ROW][COV], int n) //求逆矩阵函数{int i, j; //定义矩阵的⾏列式if(Gauss(a, b, n)){cout << "该⽅阵的逆矩阵为: \n";for(i = 0; i < n; i++){cout << setw(4);for(j = 0; j < n; j++){int temp =b[i][j]/ 1;float num = b[i][j] - temp;if(fabs(num) < 0.50)b[i][j] = (int)temp;elseb[i][j] = temp + (int)(num * 2);cout << b[i][j] << setw(10);}cout << endl;}}cout << "逆矩阵(mod26):"<< endl;for(int i = 0; i < ROW; i++){cout << setw(4);for(int j = 0; j < COV; j++){if(b[i][j] >= 0){b[i][j] = (int)b[i][j] % 26;}else{b[i][j] = 26 + (int)b[i][j] % 26;}cout << b[i][j] << setw(6);}cout << endl;}}bool Gauss(float A[ROW][COV], float B[ROW][COV], int n) //⾼斯消去法{int i, j, k;float max, temp;float t[ROW][COV]; //临时矩阵//将A矩阵存放在临时矩阵t[n][n]中for(i = 0; i < n; i++){for(j = 0; j < n; j++){t[i][j] = A[i][j];}}//初始化B矩阵为单位阵for(i = 0; i < n; i++){for(j = 0; j < n; j++){B[i][j] = (i == j) ? (int)1 : 0;}}for(i = 0; i < n; i++){//寻找主元max = t[i][i];k = i;for(j = i + 1; j < n; j++){if(fabs(t[j][i]) > fabs(max)){max = t[j][i];k = j;}}107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 }//如果主元所在⾏不是第i⾏,进⾏⾏交换if(k != i){for(j = 0; j < n; j++){temp = t[i][j];t[i][j] = t[k][j];t[k][j] = temp;//B伴随交换temp = B[i][j];B[i][j] = B[k][j];B[k][j] = temp;}}//判断主元是否为0, 若是, 则矩阵A不是满秩矩阵,不存在逆矩阵 if(t[i][i] == 0){cout << "There is no inverse matrix!";return false;}//消去A的第i列除去i⾏以外的各⾏元素temp = t[i][i];for(j = 0; j < n; j++){t[i][j] = t[i][j] / temp; //主对⾓线上的元素变为1B[i][j] = B[i][j] / temp; //伴随计算}for(j = 0; j < n; j++) //第0⾏->第n⾏{if(j != i) //不是第i⾏{temp = t[j][i];for(k = 0; k < n; k++) //第j⾏元素 - i⾏元素*j列i⾏元素 {t[j][k] = t[j][k] - t[i][k] * temp;B[j][k] = B[j][k] - B[i][k] * temp;}}}}return true;}程序运⾏结果:选择:1选择:y选择:n选择 2.明⽂加密:选择 3.密⽂解密:选择 4.退出:。
Hill 密码的加密解密与破译.ppt

关系
U C
21 3
1
A1
其中
1
20 1
T A
R S
18 19
2
A
2
其中
2
3 15
C O
A
20 1
3
15
21
3
18
19
计算A-1
★ 选择一个加密矩阵 A — 二阶正整数值的矩阵 . 例如
A 1 2 0 3
★ 将明文字母依次按每两个字母一组查出其表
值,得到一组二维向量{i}
★ 通过加密矩阵得到{i},而 i Ai (mod 26)
★ 查向量i 的字母表值,即得到密文
★ 利用加密矩阵的逆矩阵,由密文得到明文
i A1i
关于模运算 (mon26)
1
2 3
0
1 3
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=
1 8
0
9
In[7]:= b = {{5, 18, 11, 9, 25, 25, 5, 12, 8},
战争和和平时期的间谍战 吕贝卡的故事-007的故事
基度山伯爵 (大仲马) 舞蹈人形
Conan Doyle 创作的歇洛克.福尔摩斯 这段符号的译文为 AM HERE ABE SLANE .
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密码算法是一种基于线性代数的分组对称密码算法,它的
核心原理是将明文分成几个字母一组,然后利用矩阵乘法来实现加密和解密过程。
具体原理如下:
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密码

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

一、问题背景和实验目的
保密通讯在军事、政治、经济斗争和竞争中的重 要性是不言而喻的.他采用的一种方式是:将原来的信 息(称为 明文) 经过加密,变成密文之后发送出去,使 敌方即使得到密文也读不懂,而合法的接收者收到密文 之后却可以按照预先约定好的方法加以解密,再翻译成 明文.而敌方却要千方百计从密文破译出明文来.一方 如何编制密码使之不易被破译,另一方则要找到其弱点 加以破译,这就构成了密码学的主要内容.
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可逆的条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加 密 过 程 的 具 体 步
A乘以 ,得一新的2维列向量 Aa ,由 的两个分量反查字母表值得到的两 个字母即为密文字母。
骤
例如 明文为 SHUXUEJIANMOJINGSAI , 加密矩阵为A=
1 2 0 3
。
密文为
IX QT EO BA CP QS BA BU UC AA 在查字母表时利用了模运算概念 关于模运算有如下运算律
N 14
O 15
这段密文的原意是什么?
甲方截获了一段密文:
DANINQNZAV UJBEIYILNH ILONIYGKIY ILAQ
经分析这段密文是用Hill2密码编译 的,且这段密文中的字母ONIY,对应字 母OQIN,问能否破译这段密文的内 容?
Hill密码加密过程
明文 加密器
密文
普通信道
加 密 过 程 的 具 体 步
a1 a 2 (modm) a1 (modm) a 2 (modm)(modm) * *
模运算意义下的矩阵逆概念
定义1 对于一个元素属于集合Gm的n阶方阵A,若 存在一个元素属于Gm的方阵B,使得 A B=B A=E(mod m) x 则称A为模m可逆,B为A的模m的逆矩阵,记为 A 1(mod)。 B= 定义2 对Gm的一个整数x,存在Gm的一个整数y, 使得xy=1(mod m),则称y为x的乘法逆(或 1 者称为倒数),记y= (mod m)。 x 可以证明,如果x与m无公共素数因子,则x有唯 一的模m倒数 。
根据明文字母的表值,将明文信息 用数字表示,明文信息可以由26个 拼音字母A~Z表示,也可以不止 26个字母,可以含数字或符号。通 信双方事先约定它们的表值。 选择一个二阶可逆整数矩阵A, 称为Hill2密码的加密矩阵, 它是这个程 的 具 体 步
骤
将明文字母依次逐对分组,Hill2密码的加 密矩阵为二阶矩阵,则明文字母2个一 组,(Hilln是n个字母分成一组),若最后 一组字母数不足,则补充一些没有实际 意义的哑字母,这样使每一组都由2个 字母组成,查出每个明文字母的表值,构 成一个向量 。
按照甲方与乙方的约定,他 们之间的密文采用Hill2密 码,密钥为二阶矩阵
1 1 A 0 3
字 母 表 值 问 题
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 P Q R S T U V W X Y Z 16 17 18 19 20 21 22 23 24 25 0
从密码学的发展来看,密码可分为古典密 码 (即以字符为基本加密单元的密码),以及现 代密码(即以信息块为基本加密单元的密码).这 里我们将介绍古典密码的加密和破译原理.
甲方收到与之有秘密通信往来的乙方的一 个密文信息,密文内容如下:
实 际 问 题
AXSTZOSAOP BSTKSANUOP SAHAUUNSUU AKGAUZCKOP FWJO
1
据此我们不加证明地给出如下命题: 命题 元素属于Gm的方阵A模m可逆的充要条件 是: m和detA没有公因子。易见,所选加密矩阵 必须符合模A可逆的条件。
对于问题1 加密矩阵 A= 27 18 (mod 26) 1 8 0 9 0 9
将译出的明文依据汉语拼音写出,经组合得到
问题(2)属于破译问题。前面的加密与解密过程类似于二维向 量空间进行线性变换及其逆变换。每个明文向量是一个Gm 上的二维向量,乘以加密矩阵后,仍为Gm上的一个二维向量。 借助线性代数的一些运算可以求得密钥这段密文的明文为 DONGNANDAXUEBAINIANXIAOQINGJINIAN。
SHUXUEJIAN MOYUJISUAN JIYINGYONG FUXIUZHUAN YE
Hill密码的加密、解密与破译
一、问题背景和实验目的
保密通讯在军事、政治、经济斗争和竞争中的重 要性是不言而喻的.他采用的一种方式是:将原来的信 息(称为 明文) 经过加密,变成密文之后发送出去,使 敌方即使得到密文也读不懂,而合法的接收者收到密文 之后却可以按照预先约定好的方法加以解密,再翻译成 明文.而敌方却要千方百计从密文破译出明文来.一方 如何编制密码使之不易被破译,另一方则要找到其弱点 加以破译,这就构成了密码学的主要内容.