编辑: yn灬不离不弃灬 2015-09-01
第三讲 古典密码与破译 ― 编程实现 Hill2 加密与解密 若所给的明文或密文只含奇数个字母,则需补充一个哑元 ① 确定加密矩阵 ( 密钥) A 和字母的表值 ② 将明文字母分组,通过查表列出每组字母对应的向量 ③ 用A左乘得新向量,反查字母表值表得相应的密文字母 加密过程 解密过程 ① 将密文字母分组,通过查表列出每组字母对应的向量 ② 求出加密矩阵 A 的模m逆矩阵 B ③ 用B左乘得新向量,反查字母表值表得相应的明文字母 加密与解密的编程实现 问题一:建立字母与其表值之间的转换关系 问题二:编程实现加密过程 问题三:编程实现解密过程 可分为下面三个子问题 这里假定加密矩阵及其在模运算下的逆矩阵都已知 字母与表值 建立 A~Z 与0~25 之间的一一对应关系:

0 25

24 3

2 1 .

.. Z Y X C B A 分析

0 25

24 ・・・

3 2

1 表值

89 Y

65 A

90 88 ・・・

67 66 ASCII码ZX・・・ C B 字母 表值 = ASCII码-64 表值为0的字母 Z 不满足上述公式,需特殊处理 ① Matlab 编程:计算给定大写字母的表值 clear;

astr=input('请输入一个大写字母:输入时要加单引号a1=double(astr);

% 计算该字母的ASCII码a1=a1-64;

% 计算表值if a1==26 % 若字母的ASCII码为90,则其表值为0 a1=0;

endfprintf('字母 %s 对应的表值为 %d \n',astr,a1);

字母与表值 ② 修改上述程序,要求对输入进行判断: 如果输入的不是大写字母,则要求重新输入. clear;

astr=input('请输入一个大写字母:');

a1=double(astr);

% 计算该字母的ASCII码a1=a1-64;

% 计算表值if a1==26, a1=0;

endfprintf('字母 %s 对应的表值为 %d \n',astr,a1);

while (a1>90 | a190 | a190 | a1

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题