一、实验目的及要求

1. 掌握单表代替和多表代替密码体系

2. 从单表代替或多表代替密码中选取一个密码系统(除凯撒密码),编写程序实现该密码系统

二、实验设备(环境)及要求

PC机, VC++等

三、实验内容与步骤

1、加密(对代码中的主要内容进行分析讲解)

步骤:

  1. 根据密钥构造出字母代替表;
  2. 将要加密的字符串的每一个字符都减去‘a’,得它们在26个字母表的位置;
  3. 知道位置后,找出它们在字母代替表中的位置,将其替换成对应的密文。

2、解密

步骤:

  1. 将要解密的字符串的每个字符与字母代替表的每个字符一一对比,找出字符串字符在字母代替表的相对位置。
  2. 知道位置后,将字符替换为为26个字母表中相应位置的字母。

代码:

#include<stdio.h>void encrypt(char keystring[],char word[]);  //加密
void decode(char keystring[],char word[]);   //解密 int main()
{int i,j,temp;int m,count = 0;char key[20],keystring[26],word[100];char c = 'a';printf("请输入密钥key:");scanf("%s",key);for (i = 0; key[i] != '\0'; i++)   //根据密钥,构造字母代替表 {temp = 0;for(j = 0; j != i; j++){if(key[i] == key[j]){temp = 1;break;}}if(temp == 0){keystring[count] = key[i];count++;}}m = count;while(c <= 'z'){temp = 0;for(i = 0; i < m; i++){if(c == keystring[i]){temp = 1;}}if(temp == 0){keystring[count] = c;count ++;}c++;}printf("请输入要加密或解密的字符串:");scanf("%s",word);printf("请输入您要使用的功能:\n1.加密\n2.解密\n你要:");scanf("%d",&temp);switch(temp){case 1:encrypt(keystring, word);break;case 2:decode(keystring, word);break; }return 0;
}void encrypt(char keystring[],char word[])   //加密
{int i,temp;for(i =0; word[i] != '\0'; i++){temp = word[i] - 'a';word[i] = keystring[temp];}printf("%s", word);
}void decode(char keystring[],char word[])    //解密
{int i,j;for(i =0; word[i] != '\0'; i++){for(j = 0; j < 26; j++){if(word[i] == keystring[j]){word[i] = 'a' + j;break;}}}printf("%s", word);
}

四、实验结果与数据处理

密钥:spect      明文:asdfgh

  1. 加密

  1. 解密(有上题得到密文:sqcabd)

五、分析与讨论

通过这个实验,我明白了单表代替密码的原理以及步骤。单表代替密码最为重要的是通过密钥创建出字母字母代替表(注意:密钥出现重复字符要记得跳过),然后再以字母代替表为基础进行加解密。

不过单表代替密码存在一个致命的缺点:可以通过对密文中出现的各个字母进行统计,找出它们各自出现的频率,进行假设,从而推导出相应的密钥(旁路攻击)。

单表代替和多表代替密码体系相关推荐

  1. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  2. 表单及数据提交、表单的作用、服务端接收提交的数据、php处理数据流程、文件域及文件域中数据处理、php展示数据(响应)

    表单及数据提交: 表单的作用: 用于收集相关信息:html中有专门提交数据的标签,可以很容易的收集用户输入的信息,这个标签有两个重要的属性:action表单提交的地址和method以什么方式提交表单, ...

  3. html表单验证的作用,HTML5表单元素 、 表单属性 、 表单验证

    [HTML5新表单] 1.type: - email : 验证逻辑不完整,只验证是否包含 @ : - search : - url : 验证逻辑不完整,只判断是否包含 http:// : - tel ...

  4. html语言中的表单元素,HTML5中的表单元素有哪些

    摘要 腾兴网为您分享:HTML5中的表单元素有哪些,指南针,之了课堂,云端学习,易视云3等软件知识,以及挣钱花,猎豹浏览器本,移动彩铃,豆瓣音乐,mine,dnf雪人像素头补丁,偶像来了,许鲜网,长治 ...

  5. java 提交表单_http常见的form表单请求方式

    在Web开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST. 一.http请求常见的表单文件上传形式 首先了解下application/x-www-form-urlencoded和m ...

  6. HTML基本语法之表单标签:表单的组成 ,表单域,表单控件元素(表单元素) ,input表单元素, label标签, 表单控件(表单元素), select表单元素, textarea表单元素

    文章目录 表单标签 表单的组成 表单域 常用属性: 表单控件元素(表单元素) input表单元素 label标签 表单控件(表单元素) select表单元素 textarea表单元素 表单元素几个总结 ...

  7. html表单对于网页目地,html - 表单form

    一.表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.select. ...

  8. web day02 表格 表单及HTML常用的表单控件

    一. 表格的标签及属性 table属性 Width.height 宽高(单位是像素或百分比) align 对齐 border 外边框 bgcolor 背景色 background 背景图片 Cells ...

  9. html语言中表单的作用是,HTML表单是什么?

    HTML表单是一个包含表单元素的区域:表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素:表单使用表单标签(form)定义. HTML 表单的主要作用是接收用户的输 ...

最新文章

  1. 自动驾驶架构与实现路径
  2. 对于150kHz导航信号放大检波天线保护电路
  3. Matplotlib实例教程(十四)误差条形图
  4. layui 数据表格 日期格式化
  5. 输入法全屏_五笔输入法那么方便,为什么败给了拼音?如今,我可算是明白了...
  6. Sklearn——用Sklearn实现K近邻分类(KNN)
  7. x86汇编指令:EIP、ESP、EBP
  8. TCP三次握手和四次挥手详解 --- 转载
  9. 22021成都市高考成绩查询,四川大学本科教务系统登录
  10. 字节跳动怎么都十万人了?
  11. Spring MVC + Java 多文件上传及多文件中转上传
  12. 如何使用RenderDoc截帧分析Godot
  13. Vue使用ElementUI的Table组件表头与内容不对齐问题
  14. 算法评价指标——TAR,FAR,FRR,ERR
  15. 记录-Selection.addRange() 已弃用,该如何解决
  16. 线性代数学习笔记6-2:行列式的理解、行列式的性质
  17. matlab数值分析和微分Polynomial
  18. 语音信号处理 c语言,语音信号处理(毕业设计论文).doc
  19. cad计算机配置要求,cad对电脑硬件要求
  20. 使用ResponseBodyAdvice实现下载注解

热门文章

  1. 学生学籍管理系统包括成绩c语言,学籍管理系统设计C语言代码
  2. 如何使用 cri-docker 解决 Kubernetes 1.24 不支持 Docker 的问题
  3. Android:收不到应用卸载、替换、安装等广播
  4. 双系统苹果Mac笔记本如何切换windows系统?
  5. Eclipse RCP - 第一个RCP程序
  6. 婚礼视频mv短片制作,3分钟快速教程!教你制作婚礼开场创意视频
  7. 浏览器网站请求全解析
  8. UI设计好学吗?UI设计的流程是什么
  9. 5·17电信日 | 中国联通谈5G
  10. matlab里面的vpa函数,matlab用vpa函数之后怎么科学计数法