密码技术实验报告

时间:2024.3.31

XH云南大学软件学院

School of Software, Yunnan University

密码技术实验报告
密码技术实验报告

维吉尼亚密码代码

// 维吉尼亚密码c.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])

{

       return 0;

}

#include "stdio.h"

#include "string.h"

void encrypt(char[],char[],char[]);

void decrypt(char[],char[],char[]);

int main()

{

      int caozuo;

        char mingwen[100]="0";

     char miwen[100]="0";

     char miyue[100]="0"; 

    

        printf("请选择加/解密操作:1加密,2解密:");

        scanf("%d",&caozuo);

        

       while((caozuo!=1)&&(caozuo!=2))//错误判断

     {

        printf("输入错误,请从新选择:");

        scanf("%d",&caozuo);        

     }

 

         if(caozuo==1){

        printf("请输入您的明文:");scanf("%s",mingwen);

        printf("请输入您的密钥:");scanf("%s",miyue);

        encrypt(mingwen,miyue,miwen);

     }      

   

        else if(caozuo==2)

        {

        printf("请输入您的密文:");scanf("%s",miwen);

        printf("请输入您的密钥:");scanf("%s",miyue);

        decrypt(miwen,miyue,mingwen);         

        }   

        getchar();//回收回车

}

        

void encrypt(char mingwen[],char miyue[],char miwen[])

{

       int i,j,n,m,len_miyue,len_mingwen;

       j=0;

       len_miyue= strlen(miyue);

       len_mingwen= strlen(mingwen);

             

    for(i=0;i<len_mingwen;i++)

       {

           if(mingwen[i]>='a' && mingwen[i]<='z'){//小写转大写

           m=65;n=97;

                 if(miyue[j%len_miyue]>='A' && miyue[j%len_miyue]<='Z')//密钥为大写改为小写

                        miyue[j%len_miyue]=miyue[j%len_miyue]+32;

              }

           else if(mingwen[i]>='A' && mingwen[i]<='Z'){//大写转小写

           m=97;n=65;

                 if(miyue[j%len_miyue]>='a' && miyue[j%len_miyue]<='z')//密钥为小写改为大写

                        miyue[j%len_miyue]=miyue[j%len_miyue]-32;

              }

        miwen[i]=(mingwen[i]-n+miyue[j%len_miyue]-n)%26+m;

        j++;

     }    

       printf("加密后的密文为:");

       puts(miwen);

    getchar();

}

        

void decrypt(char miwen[],char miyue[],char mingwen[])

{

       int i,j,n,m,len_miyue,len_miwen;

       j=0;

       len_miyue= strlen(miyue);

       len_miwen= strlen(miwen);

    for(i=0;i<len_miwen;i++)

       {

           if(miwen[i]>='a' && miwen[i]<='z'){//小写转大写

           m=65;

                 if(miyue[j%len_miyue]>='A' && miyue[j%len_miyue]<='Z'){

                        miyue[j%len_miyue]=miyue[j%len_miyue]+32;//密钥改为小写

                 }

              }

           else if(miwen[i]>='A' && miwen[i]<='Z'){//大写转小写

           m=97;

           if(miyue[j%len_miyue]>='a' && miyue[j%len_miyue]<='z') {

                        miyue[j%len_miyue]=miyue[j%len_miyue]-32;//密钥改为大写

                 }

        }

        mingwen[i]=(miwen[i]-miyue[j%len_miyue]+26)%26+m;

        j++;     

        }

    printf("解密后的明文为:");

       puts(mingwen);

    getchar();

}


第二篇:数学建模实验报告古典密码与破译


古典密码与破译

一、实验目的及意义

本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.

二、实验内容

1.Hill2 加密;

2.Hill2 解密。

三、实验步骤

1. 开启软件平台——MATLAB,开启MATLAB编辑窗口;

2. 根据加密解密算法步骤编写M文件

  1. 保存文件并运行;
  2. 观察运行结果(数值或图形);
  3. 根据观察到的结果和体会写出实验报告。

四、实验要求与任务

根据实验内容和步骤,完成以下实验,要求写出实验报告。

1. 实际问题 (甲) 的修正:按照甲方与乙方的约定,他们之间的密文通信采用 Hill2 密码,密钥为二阶矩阵且汉语拼音的 26 个字母以及空格(字母 A~Z 的表值为 1~26,空格的表值为 0)与 0~26 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 1、表 2 以及附录中的程序,以给出模 27 意义下矩阵可逆的判别方法和具体求法.

2. 若将你姓名的拼音作为明文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的Hill2密文.

3. 若将你姓名的拼音作为Hill2密文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的明文.

五. 程序代码及运行结果(经调试后正确的源程序)

1. 实际问题 (甲) 的修正:按照甲方与乙方的约定,他们之间的密文通信采用 Hill2 密码,密钥为二阶矩阵且汉语拼音的 26 个字母以及空格(字母 A~Z 的表值为 1~26,空格的表值为 0)与 0~26 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 1、表 2 以及附录中的程序,以给出模 27 意义下矩阵可逆的判别方法和具体求法.

明文字母的表值

27倒数表

表2可用①中程序求得:

①  求模27倒数表(prog1_MOD27.m)

程序代码:

m=27;

for a=1:m

  for i=1:m

    if mod(a*i,m)==1

      fprintf('%d 的模%d倒数是: %d\n',a,m,i);break;

    end;

  end;

end

运行结果:

1 的模27倒数是: 1

2 的模27倒数是: 14

4 的模27倒数是: 7

5 的模27倒数是: 11

7 的模27倒数是: 4

8 的模27倒数是: 17

10 的模27倒数是: 19

11 的模27倒数是: 5

13 的模27倒数是: 25

14 的模27倒数是: 2

16 的模27倒数是: 22

17 的模27倒数是: 8

19 的模27倒数是: 10

20 的模27倒数是: 23

22 的模27倒数是: 16

23 的模27倒数是: 20

25 的模27倒数是: 13

26 的模27倒数是: 26

②  判断二阶矩阵在模27意义下是否可逆,可逆则求其逆(prog1.m)

程序代码:

m=27;

aa=input('输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:')

while size(aa)~=[2 2]

  aa=input('输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:')

end

a=det(aa);bb=aa;

if gcd(m,a)~=1

 disp(' 该矩阵不可逆 ')

else

  for i=1:m

    if mod(a*i,m)==1

      antaa=i;break;

    end

  end

  astar=[aa(2,2) -aa(1,2);-aa(2,1) aa(1,1)];

  invaa=mod(antaa*astar,m);

disp(['原矩阵是:',mat2str(aa),',它的逆矩阵(mod',num2str(m),')是:',mat2str(invaa)])

end

运行结果:

输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:[1 2;0 4]

aa =

     1     2

     0     4

原矩阵是:[1 2;0 4],它的逆矩阵(mod27)是:[1 13;0 7]

2. 若将你姓名的拼音作为明文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的Hill2密文.

程序代码:(prog2.m)

m=27;enmat=[1 2;0 4];demat=[1 13;0 7];ZERO=64;c=[];en=[];

fprintf('本组成员的姓名为 吴亚山 李杰 赵传来,拼音为:\n')

fprintf('WU YA SHAN LI JIE ZHAO CHUAN LAI\n')

fprintf('以[1 2;0 4]为密钥对此拼音串加密\n')

astr=['WU YA SHAN LI JIE ZHAO CHUAN LAI'];

an=double(astr);

if mod(length(an),2)==1

  an=[an,an(length(an))];

end

an=an-ZERO;

for i=1:length(an)

  if an(i)==-32

    an(i)=0;

  end

end

c=reshape(an,2,length(an)/2);

dn=mod(enmat*c,m);

en=reshape(dn,1,length(an));

en=en+ZERO;

for i=1:length(en)

  if en(i)==64

    en(i)=32;

  end

end

en=en(1: length(an));

disp(['密文是:',char(en)])

运行结果:

本组成员的姓名为 吴亚山 李杰 赵传来,拼音为:

WU YA SHAN LI JIE ZHAO CHUAN LAI

以[1 2;0 4]为密钥对此拼音串加密

密文是:KCWSA HEBBXUI AIE OEDFFLWCBBXUSI

3. 若将你姓名的拼音作为Hill2密文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的明文.

程序代码:(prog3.m)

m=27;enmat=[1 2;0 4];demat=[1 13;0 7];ZERO=64;c=[];en=[];

fprintf('本组成员的姓名为 吴亚山 李杰 赵传来,拼音密文为:\n')

fprintf('KCWSA HEBBXUI AIE OEDFFLWCBBXUSI\n')

fprintf('以[1 13;0 7]为密钥对此拼音串密文解密\n')

astr=['KCWSA HEBBXUI AIE OEDFFLWCBBXUSI'];

an=double(astr);

if mod(length(an),2)==1

  an=[an,an(length(an))];

end

an=an-ZERO;

for i=1:length(an)

  if an(i)==-32

    an(i)=0;

  end

end

c=reshape(an,2,length(an)/2);

dn=mod(demat*c,m);

en=reshape(dn,1,length(an));

en=en+ZERO;

for i=1:length(en)

  if en(i)==64

    en(i)=32;

  end

end

en=en(1: length(an));

disp(['明文是:',char(en)])

运行结果:

本组成员的姓名为 吴亚山 李杰 赵传来,拼音密文为:

KCWSA HEBBXUI AIE OEDFFLWCBBXUSI

以[1 13;0 7]为密钥对此拼音串密文解密

明文是:WU YA SHAN LI JIE ZHAO CHUAN LAI

六.实验总结

本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.

实验中解决了如下问题:求模27倒数表;判断二阶矩阵在模27意义下是否可逆,可逆则求其逆;求明文字符串在模27意义下的Hill2密文;求密文字符串在模27意义下的Hill2密文。

在测试求密文的程序时,我发现按照文中表1给定的明文字母表值无法加密每个字母都用空格分隔的字符串(第一个字符为字母),如:"A B C D E F G",经过分析,我觉得是因为空格的明文为0,经过密钥左乘后对原始数据没有影响,故没实现加密。

                                 学生签名:          

七.教师评语及成绩

教师签名:           

                                                      年    月     日

更多相关推荐:
密码锁课程设计报告

1引言11电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作从而控制机械开关的闭合完成开锁闭锁任务的电子产品它的种类很多有简易的电路产品也有基于芯片的性价比较高的产品现在应用较广的电子密码锁是以芯...

南邮电子密码锁设计实验报告

电子密码锁设计实验报告摘要密码锁又称电子锁它的主要功能是1用数字方式输入开锁密码输入密码正确时开锁2如果密码有误或者输入时间过长则发出报警信号目录第一章系统结构与技术指标11系统功能结构12性能和电气指标13设...

单片机密码锁实验报告

单片机系统设计实训报告专业生产过程自动化姓名李某班级学号指导教师实训期间内蒙古电子信息技术学院目录一实验目的3二实验要求3三实验基本原理3四实验设计分析31设计思想3五实验要求实现41电路设计42534x466...

电子密码锁实验报告

电子时钟实验报告密码锁实验报告一实验目的1学习8051定时器时间计时处理跑马灯按键扫描及LED数码管显示的设计方法2设计任务及要求利用实验平台上8个LED数码管按键跑马灯实现设置密码密码锁的功能二实验要求基本要...

VHDL密码锁实验报告

华南师范大学实验报告学生姓名学号20xx3100202专业通信工程年级班级课程名称可编程数字系统实验项目VHDL设计一密码锁试验时间指导老师冯寿廷一课程设计目的熟悉EDA工具掌握用VHDL语言进行数字系统设计的...

改装密码锁实验报告

北京邮电大学电路综合实验报告实验题目带音乐的密码锁学生姓名班级小班学号同组姓名EMAIL目录一先前准备流水灯数码管二设计目的用途功能三硬件设计四软件设计五实验器材六实验结果及截图七分工情况八实验总结和心得体会九...

电子技术实验报告密码锁设计

中国石油大学胜利学院电子技术课程设计总结报告题目电子密码锁设计学生姓名徐连杰学号20xx07013137系别信息与计算科学系专业年级20xx级自动化专业1班指导教师王心刚20xx年6月23日一设计任务与要求1电...

密码实验报告1

课程名称密码编码学实验实验名称古典密码算法一实验目的及内容熟悉古典密码算法凯撒密码算法和维吉尼亚密码算法的编程实现加强对密码学的理解二实验源代码1凯撒密码算法includeltstdiohgtincludelt...

仿射密码实验报告

实验报告姓名1111学号22222班级2222日期20xx211古典密码仿射密码一实验环境1硬件配置处理器Corei5M内存2GB主硬盘320G2使用软件1操作系统win72软件工具MicrosoftVisua...

基于单片机的电子密码锁设计_单片机课程设计报告

单片机密码锁课程设计报告湖南师大本科生课程设计目录1引言12设计要求23硬件电路设计331设计方案的选择332主要元器件简介433硬件系统结构84程序设计135总结15参考文献16附件一电路原理图及作品实物图1...

密码学实验报告3

哈尔滨工程大学实验报告实验名称DES加密班级学号姓名实验时间20xx615成绩指导教师实验室名称哈尔滨工程大学实验室与资产管理处制一实验名称MD5加密二实验目的通过编程实现MD5加密的算法设计并加深对其的了解三...

电子密码锁设计 开题报告

毕业设计开题报告电子密码锁的设计与实现姓名院系专业年级学号指导教师职称起止时间

密码锁实验报告(34篇)