C语言实现移位密码

news2024/11/27 9:40:17

一.移位密码

   移位密码(Caesar Cipher)也叫凯撒密码是一种简单的加密技术,它通过将明文中的每个字母按照指定的位数进行移位,从而生成密文。例如,在一个"左移3位"的移位密码中,文中的每个字母都向左移动3个位置,即A变成D,B变成E, 以此类推。移位密码可以被轻松破解,因此现在已经很少用于实际的加密通信中。

二.原理

2.1 名词解释

  • 明文:发送发想要发送的信息;
  • 密文:经过加密后的信息;
  • 密匙:加密时移动的位数k。
    (这里解释是我个人理解,非标准定义)

2.2 移位加密

具体来说,移位加密通常将明文中的每个字母替换为其在字母表中向后(或向前)移动固定数量的位置得到对应的密文字母。
步骤如下:

  • 选择一个偏移量 k,确定每个字符需要向后移动还是向前移动。
  • 对于明文中的每个字符,根据偏移将其向后或向前移动相应的位数,并将结果记录下来。
  • 将所有移位后的字符连接起来,得到密文。

例如:这里假设明文是 word ,现在的密匙(偏移量)为3,那么我们加密后的密文就是 zrug 。(这里需要结合字母顺序表查看,顺序表由发送发与接收方约定定义,无第三方知道) 这里的偏移量表示字母移动的距离,当偏移量为正数时,字母向后移动;当偏移量为负数时,字母向前移动。

2.3 移位解密

具体来说,移位解密通常将密文中的每个字母替换为其在字母表中向后(或向前)移动固定数量的位置得到对应的明文字母。
步骤如下

  • 选择一个偏移量 k,确定每个字符需要向后移动还是向前移动。
  • 对于密文中的每个字符,根据偏移将其向后或向前移动相应的位数,并将结果记录下来。
  • 将所有移位后的字符连接起来,得到明文。

例如:如果现在的密文是 zrug ,密匙为3,那么明文就是 word

2.4 补充描述

  • 现实生活中,密码是不存在空格的,因为英文大家都知道,传输一篇文章空格要占许多,对发送加密造成干扰,所以约定去掉字母。
  • 补充本次实验所需的字母顺序表
abcdefghijklmnopqrstuvwxyz
012345678910111213141516171819202122232425

这里我们为了方便理解,就用小写。

三.优缺点

优点:

  • 简单易懂
  • 易于实现和使用

缺点:

  • 安全性较低,容易受到暴力破解攻击
  • 容易受到频率分析攻击

缺陷原因分析:

  • 只是将明文中的字符按照一定规则进行移动,不涉及其他复杂的操作;
  • 没有对明文中不同字符出现的频率进行混淆处理。

四.C语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Maxsize 50            //定义信息最大量

//加密函数
void jiami(char *&p,int n,int h)
{
	printf("密文:");
	for(int i=0;i<h-1;i++)               //循环输出数组的每一个字符
	{
		printf("%c",(char) ((p[i] + 'a' - 97) + n - 97) % 26 + 97);
	}
	printf("\n");
}

//解密函数
void jiemi(char *&p)
{
	for (int i = 1; i < 26; i++) {
		printf("k为%d的明文:", i);            //循环输出数组的每一个字符
		for (int j = 0; j < strlen(p); j++) {
			printf("%c", (char) (((p[j] + 'a' - 97) + 26 - i - 97) % 26 + 97));
			//对应ASCLL码表,但是我们自定义了字母顺序表,需要转换范围
		}
		printf("\n");
	}
}

int main()
{ 
	char str1[Maxsize],str2[Maxsize];
	char *p=str1,*q=str2;
	int n;
	printf("请输入明文:");            //加密测试
	fgets(str1, Maxsize, stdin);
    int len1=strlen(str1);
	printf("请输入移位密匙:");
	scanf("%d",&n);
	jiami(p,n,len1);
	printf("------------------");
	printf("\n");
	printf("请输入密文:");             //解密测试
	printf("\n");
	scanf("%s",str2);
	jiemi(q);

}

五.运行结果

if4C.jpg

六.补充

这是密码学中最简单的一种加密方法,但我们可以使其变得更复杂一些,比如自定义字母顺序表,密匙加强等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.2 SpringBoot实现上传图片API + url映射本地路径registry.addResourceHandler

文章目录 前言一、url映射本地路径二、上传图片API2.1 接口UploadService2.2 实现类UploadServiceImpl2.3 上传图片Controller 三、测试最后 前言 在图书借阅系统里&#xff0c;有很多图片需要前端展示&#xff0c;这些图片大都是由用户上传&#xff0c;保存在服务端&#xff…

chatgpt赋能python:Python拆数程序:如何快速分解数字?

Python拆数程序&#xff1a;如何快速分解数字&#xff1f; 在计算机编程中&#xff0c;数字拆分是一个非常重要的概念。拆分数字可以让我们更好地理解数字格式&#xff0c;进行计算和分析。而Python作为一种功能强大的编程语言&#xff0c;提供了许多高效的工具来帮助我们快速…

【备战秋招】每日一题:华东师范大学保研机试-2022-罗马数字

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客罗马数字 题目内容 罗马数字是古罗马使用的记数系统&#xff0c;现今仍很常见。 罗马数字有七个基本符号: I,V,X,L,C,D,M。 罗马数字IVXLCDM对应的阿拉伯数字1510501005001000 需要注意的是罗马数字与十进位数字的…

chatgpt赋能python:Python拆分语句,让数据处理更有效率

Python 拆分语句&#xff0c;让数据处理更有效率 Python是一种强大的编程语言&#xff0c;不仅支持各种应用开发&#xff0c;而且非常适合数据处理。Python的易用性和灵活性使其成为了数据科学家和工程师首选的编程语言之一。Python的字符串拆分功能能够轻松处理数据的分割和组…

从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)

目录 1. priority_queue的模拟实现 1.1 未完全的priority_queue 1.2 迭代器区间构造和无参构造 1.3 仿函数的介绍和使用 1.4 完整priority_queue代码&#xff1a; 1.5 相关笔试选择题 答案&#xff1a; 2. 反向迭代器 2.1 反向迭代器的普通实现 reverse_iterator.h&a…

性能测试基础知识(一)性能测试策略

性能测试策略 一、什么是性能测试&#xff1f;二、性能测试的目的三、性能测试策略1、基准测试2、并发测试3、负载测试4、压力测试5、其他测试 一、什么是性能测试&#xff1f; 性能测试是在一定的负载1条件下&#xff0c;系统的响应时间等特性是否满足特定的性能需求。需要有…

软考A计划-系统集成项目管理工程师-信息化知识(二)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【高危】Apache Nifi JMS组件存在JNDI反序列化漏洞

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具&#xff0c; JndiJmsConnectionFactoryProvider 控制器组件用于配置 JMS 连接地址。 Apache NiFi 1.8.0 至 1.21.0 版本中&#xff0c;由于 JndiJmsConnectionFactoryProvider 控制器服务允许已授权的用户配置 URL…

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用 1、准备工作 在第一节里&#xff0c;我们用stm32cubemx将pa2 pa3管脚配置成usart2&#xff0c;用于跟st-link虚拟串口的打印用&#xff0c;那么我们先重定向printf函数&#xff0c;看这条通道是…

创建 Python 脚本以在 Linux 中打开新终端并运行命令

文章目录 创建在 Linux 中打开新终端并运行命令的 Python 脚本在 Linux 中创建 Python 脚本来检查 Python 版本使打开的终端保持活动状态并在其中运行命令的 Python 脚本在 Linux 中使用 Python 子模块 subprocess() 将命令传递到新终端总结 Linux 操作系统以其程序员广泛使用的…

PB9如何实现datawindow打印导出PDF,PB导出PDF

PB9如何实现datawindow打印导出PDF&#xff0c;PB导出PDF&#xff1f; 之前的saveas导出pdf&#xff0c;设置非常麻烦。需要 1. 安装gs705w32.exe 2. 安装虚拟打印机 Sybase\Shared\PowerBuilder\drivers\ADIST5.INF 手动添加打印机 这个方法现在对于win64不支持。 今天客…

window11 + python3.7+NVDIA11.7 +pytorch GPU 加速环境配置

window11 python3.7NVDIA11.7 pytorchGPU 加速环境配置 关于pytorch配置GPU环境我在网上看了很多&#xff0c;其实现在基本上没有windows 11 版本环境的配置但是其实没必要担心这个&#xff0c;这没有影响。 对于博主呢&#xff0c;其实不太像配置GPU的&#xff0c;因为其实…

【MYSQL篇】一文弄懂mysql索引原理

文章目录 索引是什么&#xff1f;索引定义索引类型 索引存储模型推演二分查找二叉查找树&#xff08; Binary Search Tree&#xff09;平衡二叉树&#xff08;AVL Tree&#xff09;多路平衡查找树&#xff08;B Tree&#xff09;B树&#xff08;加强版B Tree&#xff09; 小结 …

PyQt中数据库的访问(一)

访问数据库的第一步是确保ODBC数据源配置成功&#xff0c;我接下来会写数据源配置的文章&#xff0c;请继续关注本栏&#xff01; &#xff08;一&#xff09;数据库连接 self.DBQSqlDatabase.addDatabase("QODBC") self.DB.setDatabaseName("Driver{sqlServer…

shell 实现子进程多任务,进程高并发

多进程的作用 提高程序的效率&#xff1a;一些CPU密集型的任务&#xff0c;如数据处理、解压、加密等&#xff0c;使用多进程可以提高程序的执行效率&#xff0c;更快地完成计算任务&#xff1b; 实现更复杂的功能&#xff1a;多进程可以在同一时间向不同的方向处理不同的任务…

SpringBoot创建和运行

1、什么是SpringBoot1.1、优点 2、项目创建2.1、使用Idea创建2.2、使用网页创建 3、项目目录介绍4、项目运行5、包路径错误 1、什么是SpringBoot Spring是为了简化Java程序开发的。Spring Boot是一种用于快速构建独立、生产级别的Java应用程序的开源框架&#xff0c;是为了简化…

MySQL优化--undo log和redo log的区别

首先我们需要知道两个概念 缓冲池&#xff08;buffer pool&#xff09;:主内存中的一个区域&#xff0c;里面可以缓存磁盘上经常操作的真实数据&#xff0c;在执行增删改查操作时&#xff0c;先操作缓冲池中的数据&#xff08;若缓冲池没有数据&#xff0c;则从磁盘加载并缓存…

MySQL数据库基础 13

第十三章 约束 1. 约束(constraint)概述1.1 为什么需要约束1.2 什么是约束1.3 约束的分类 2. 非空约束2.1 作用2.2 关键字2.3 特点2.4 添加非空约束2.5 删除非空约束 3. 唯一性约束3.1 作用3.2 关键字3.3 特点3.4 添加唯一约束3.5 关于复合唯一约束3.5 删除唯一约束 4. PRIMARY…

燃气管网监测系统助力天燃气管道安全运行

随着城市化的进程&#xff0c;燃气管道网络在各个城市中越来越密集&#xff0c;一旦发生燃气泄漏等安全事故&#xff0c;后果将不堪设想。因此&#xff0c;城市燃气管网的建设发展有赖于制定一个安全可靠的监控方案&#xff0c;以保障供气管道与用户安全。物联网技术的发展为城…

北邮国院物联网RFID课程笔记

PDF 获取&#xff1a;微信公众号&#xff1a;灰海宽松&#xff0c;后台回复 “RFID” 获取。 文章目录 RFID1. IntroductionComparison of different automatic identification technologiesThe main features of RFIDConstraints of RFID technologyCore technologies of RFI…