Java基本数据类型 以太坊 MongoDB 循环 linux创建文件 gitee golang 二代征信 matplotlib mtu原理 architecture nlp jQuery Mobile vue全局组件 网络营销视频教程 鼠标进入和离开事件 js键值对数组 matlab向量的模 linux查看jdk安装路径 svn查看历史版本 mysql自然连接 python循环 python网络编程 python生成随机数 python实战 java运行环境配置 java类的继承 java基础编程 java获取时间 java读取文件 linux镜像安装 pascal教程 俄罗斯方块c语言代码 js转int 视频加字幕软件 ps水平翻转快捷键 工程html加密 ios删除描述文件 发射爱心的图片 mathcad
当前位置: 首页 > 学习教程  > 编程语言

Hill古典密码学

2020/7/24 9:31:38 文章标签:

 

1.实验目的:

(1)了解经典加密算法对于同学们理解现代密码学的基本思想有很大帮助。

(2)在本实验中,采用MATLAB实现hill加密

2.实验设备:

Win10系统、MATLAB软件

3.实验原理:

希尔密码(Hill Password)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。每个字母当作26进制数字:a=0, b=1, c=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。

注意:用作加密的矩阵(即密匙)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。

1)加密:密文=明文*密钥矩阵*mod26 (注:明文要被分割成与密钥维数相同的一维行列式)

2)解密:明文=密文*密钥矩阵的逆mod26 (注:要求与加密过程相同)

3.实验内容:

为了实现Hill加密,需要如下的功能模块:

1.需要一个子程序将输入的字符串转换为从0-26的数字;

2.需要编写一个实现mode26的矩阵向量乘法子程序;

注:先写出总体的代码,然后实现每一个模块。

clear all;
message_P=input('INPUT:','s');
n=length(message_P);
%%加密过程
p=char(message_P)-97;%明文字母转数字
if mod(n,3)==0
p1=p;    
else if mod(n,3)==1
     p(n+1)=25;
     p(n+2)=25;
     p1=p; 
    else
        if mod(n,3)==2
            p(n+1)=25;
            p1=p;
        else
        end
    end
end
%秘钥矩阵可更改
k=[1 2 3;1 1 2;0 1 2];%密钥
m=length(p1);
p1=reshape(p1,3,m/3);
c= mod(k*p1,26);
c1=reshape(c,1,m);
message_c=char(c1+97);
fprintf('miwen:"%s"\n',message_c);
%%解密过程
k2=inv(k);
c2=char(message_c)-97;%密文字母转数字
c2=reshape(c2,3,m/3);
message_p2= mod(k2*c2,26);
c3=reshape(message_p2,1,m);
message_p2=char(c3+97);
fprintf('jiemi:"%s"\n',message_p2);

 


本文链接: http://www.dtmao.cc/news_show_50097.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?