C语言与ASCII码应用之简单加密
加密是什么?什么是加密通话?用人话说就是一句有含义的话,经过一定的特殊规则把里面的每个字按照这个规则进行改变,但是这个规则只有你和你想让知道这条信息的人知道
今天我们来用ASCII码编写一个简单加密与解密的程序,用C语言实现秘密通话(当然因为C老登与ASCII码的语言兼容问题,今天咱们写的这个东西只适合英文)也就是凯撒密码
目标
写一个程序,可以把英文句子按照移步加密方式(每个字母往后移几步)加密并且破解,步长由用户指定,仅可以加密A~Z和a~z英文字母以及数字,如果加上步长后超出范围从第一个字母重新开始
思路
这个问题有点复杂,正好画一下算法描述图梳理一下
相关规则
是个大概
运用函数思想,这里需要两个函数
1、检查输入的句子是不是只有英文和阿拉伯数字
2、加密的函数
现在先写一个框架
#include <stdio.h>
#include <string.h>
#define MAX 256int Foreach(char p[]);
void Encryption(char p[],int n);int main()
{char p[MAX] = "";int n = 0;printf("Please Enter Sentences(English and Arabic numerals Only):\n");fgets(p,MAX,stdin);p[strlen(p)-1] = '\0'; //节省内存if(Foreach(p) == -1){printf("The input is not composed of English sentences and Arabic numerals");return 1; //异常终止}printf("Please Enter step size: ");scanf("%d",&n);Encryption(p,n);printf("%s",p);return 0;
}int Foreach(char p[])
{}void Encryption(char p[],int n)
{}
ASCII码知识点
c语言里面的字符其实都是默认转化为ASCII码的,都是数字,所以可以加减乘除,数学操作都可以进行(第一次学的时候感觉怪怪的,从来没加减乘除过字母)
我们先写第一个,顺便修改一下main函数避免奇奇怪怪的输入(推荐标点法,return也是一种标点法)
ctype与isalnum
isalnum它用于检查给定的字符是否是字母(无论是大写还是小写)或数字(0-9)
isalnum
函数的返回值如下:
- 如果字符是字母或数字,函数返回非零值(通常是
1
)。 - 如果字符不是字母或数字,函数返回零。
具体编写
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 256int Foreach(char p[]);
//void Encryption(char p[],int n);int main()
{char p[MAX] = "";int n = 0;printf("Please Enter Sentences(English and Arabic numerals Only):\n");fgets(p,MAX,stdin);p[strcspn(p, "\n")] = '\0'; //节省内存if(Foreach(p) == -1){printf("The input is not composed of English sentences and Arabic numerals");return 1; //异常终止}else if (Foreach(p) == 0){printf("No input entered. Please enter a valid sentence.\n");return 1; // 异常终止}printf("Please Enter step size: ");if (scanf("%d", &n) != 1) {// 输入不是一个整数printf("Input is not an integer. Exiting program.\n");return 1; // 异常终止}//Encryption(p,n);printf("%s",p);return 0;
}int Foreach(char p[])
{int hasContent = 0; // 标记是否有非空格内容if (p == NULL){return -1;}for (int i = 0; p[i] != '\0'; i++){if (!isalnum(p[i]) && p[i] != ' ' && p[i] != '.' &&p[i] != ','){return -1;}if (isalnum(p[i])) // 如果字符是字母或数字,则标记有内容{hasContent = 1;}}if (hasContent == 0) // 如果没有非空格内容,返回0{return 0;}return 1; // 输入有效}/*
void Encryption(char p[],int n)
{}*/
接下来就是加密函数
void Encryption(char p[],int n)
{int i = 0;while(p[i] != '\0'){if(p[i]>='a' && p[i]<='z'){p[i] = p[i] + n;if(p[i]>'z'){p[i] = p[i]-'z'+'a'-1;}}if(p[i]>='A' && p[i]<='Z'){p[i] = p[i] + n;if(p[i]>'Z'){p[i] = p[i]-'Z'+'A'-1;}}if(p[i]>='0' && p[i]<='9'){p[i] = p[i] + n;if(p[i]>'9'){p[i] = p[i]-'9'+'0'-1;}}i++;}
}
写完就是这个
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 256int Foreach(char p[]);
void Encryption(char p[],int n);int main()
{char p[MAX] = "";int n = 0;printf("Please Enter Sentences(English and Arabic numerals Only):\n");fgets(p,MAX,stdin);p[strcspn(p, "\n")] = '\0'; //节省内存if(Foreach(p) == -1){printf("The input is not composed of English sentences and Arabic numerals");return 1; //异常终止}else if (Foreach(p) == 0){printf("No input entered. Please enter a valid sentence.\n");return 1; // 异常终止}printf("Please Enter step size: ");if (scanf("%d", &n) != 1) {// 输入不是一个整数printf("Input is not an integer. Exiting program.\n");return 1; // 异常终止}Encryption(p,n);printf("%s",p);return 0;
}int Foreach(char p[])
{int hasContent = 0; // 标记是否有非空格内容if (p == NULL){return -1;}for (int i = 0; p[i] != '\0'; i++){if (!isalnum(p[i]) && p[i] != ' ' && p[i] != '.' &&p[i] != ','){return -1;}if (isalnum(p[i])) // 如果字符是字母或数字,则标记有内容{hasContent = 1;}}if (hasContent == 0) // 如果没有非空格内容,返回0{return 0;}return 1; // 输入有效}void Encryption(char p[],int n)
{int i = 0;while(p[i] != '\0'){if(p[i]>='a' && p[i]<='z'){p[i] = p[i] + n;if(p[i]>'z'){p[i] = p[i]-'z'+'a'-1;}}if(p[i]>='A' && p[i]<='Z'){p[i] = p[i] + n;if(p[i]>'Z'){p[i] = p[i]-'Z'+'A'-1;}}if(p[i]>='0' && p[i]<='9'){p[i] = p[i] + n;if(p[i]>'9'){p[i] = p[i]-'9'+'0'-1;}}i++;}
}
解码函数
void Decryption(char p[], int n)
{int i = 0;while (p[i] != '\0') {if (p[i] >= 'a' && p[i] <= 'z') {p[i] = p[i] - n;if (p[i] < 'a') {p[i] = p[i] + 'z' - 'a' + 1;}} if (p[i] >= 'A' && p[i] <= 'Z') {p[i] = p[i] - n;if (p[i] < 'A') {p[i] = p[i] + 'Z' - 'A' + 1;}}if (p[i] >= '0' && p[i] <= '9') {p[i] = p[i] - n;if (p[i] < '0') {p[i] = p[i] + '9' - '0' + 1;}}i++;}
}
就是把逻辑反过来而已
运行效果
总结
我们学习了:
1、ASCII码运算(字符本质是数字)
2、isalnum函数
3、标记法(return法)避免错误输入
4、凯撒密码
5、编程流程图
说到密码,我想起了图灵机,最初就是用来解码的
以上均是本人理解,如有不对欢迎各位大佬评论区指出~
相关文章:
C语言与ASCII码应用之简单加密
加密是什么?什么是加密通话?用人话说就是一句有含义的话,经过一定的特殊规则把里面的每个字按照这个规则进行改变,但是这个规则只有你和你想让知道这条信息的人知道 今天我们来用ASCII码编写一个简单加密与解密的程序,…...
python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票:2025年1月8日…...
[论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent
Corpus Poisoning via Approximate Greedy Gradient Descent [2406.05087] Corpus Poisoning via Approximate Greedy Gradient Descent 基于近似贪婪梯度下降的语料库投毒 面向检索器的攻击 AGGD 通过从所有符元位置中选择排名最高的符元,而不是从单个随机采样…...
C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
开源 vGPU 方案 HAMi 解析
开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 (一)资源感知与绑定 在 k8s 中,资源与节点紧密绑定。对于 GPU 资源,我们依赖 NVIDIA 提供的 device-plugin 来进行感知,并将其上报到 kube-apiserver…...
Unity 大地图功能 离线瓦片地图
不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下: 按下M键打开/关闭大地图功能 打开大地图时,默认玩家位置居中 大地图支持拖拽,可调节拖拽速度,支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...
【计算机网络】什么是网关(Gateway)?
网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…...
AIOps 平台
AIOps(Artificial Intelligence for IT Operations)平台是一种结合人工智能(AI)技术和IT运营管理的解决方案,旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...
使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备
一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB,这里会将创建数据库的代码放到了,将文件复制到data/sql目录中,然后在终端中的项目文件夹中执行: pip install sqlite3现在创建一个名为sqldb的数据库&a…...
TCP与UDP协议
一、主要区别 ① 连接的建立和断开: TCP(Transform Control Protocol)通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后,TCP提供稳定的数据传输服务。当通信结束时,TCP通过四次…...
【MySQL】MVCC详解, 图文并茂简单易懂
欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...
Cisco认证是Cisco公司建立的网络技术证书体系
思科认证体系是由Cisco公司建立的分为3个层次的网络技术证书体系,随着Cisco产品线的扩大和市场份额的不断提升,Cisco产品从当初仅有的 Cisco路由器和Cisco交换机发展到现在的6大方向:路由交换,网络设计,网络安全&#…...
Clojure语言的面向对象编程
Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言,它特别强调函数式编程,Immutable数据结构和强大的并发能力。然而,很多人可能会问:Clojure支持面向对象编程吗?虽然Clojure没有像Java或C那样的传统类和…...
React快速上手到项目实战总篇
React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化(易开发易维护) 数据驱动视图 :定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改,不在操作DOM 增加开发效率 使用vite创建Recat项目 …...
Dart语言的语法
Dart语言的魅力与应用 引言 随着互联网的发展和移动设备的普及,编程语言层出不穷,各种语言如雨后春笋般被创造出来。其中,Dart语言作为一种现代编程语言,凭借其简洁的语法、强大的功能以及良好的性能,受到了越来越多…...
C++——多态
目录 前言 1. 多态的概念 2. 多态的定义及其实现 2.1 多态的构成条件 2.1.1 实现多态的两个重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 多态场景的⼀个选择题 2.1.5 虚函数重写的⼀些其他问题 2.1.5.1 协变(了解) 2.1.5.2 析构函…...
什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行
什么是Transformer模型中的KV缓存? 在Transformer模型中,KV缓存(Key-Value Cache)具有重要作用,以下是关于它的详细介绍: 概念含义 KV缓存主要是用于存储在模型推理过程中已经计算过的键(Key)和值(Value)信息。在Transformer架构里,比如在自注意力机制等计算环节…...
12.C语言中的struct详解:定义、赋值、指针、嵌套与位字段
目录 1.简介2.struct 的复制3.struct 指针4.struct 的嵌套5.位字段6.弹性数组成员 1.简介 本篇原文为:C语言中的struct详解:定义、赋值、指针、嵌套与位字段。 更多C进阶、rust、python、逆向等等教程,可点击此链接查看:酷程网 …...
洛谷 P3000 [USACO10DEC] Cow Calisthenics G
思路 题目要求断若干条边后形成的连通块中,最大的直径最小,很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...
前端拿到zip中所有文件并下载为新的zip文件
问题原因:后端返回了一个zip格式文件供前端下载,然后下载后,形成了zip套zip的形式,当后端不愿处理时,前端不能坐以待毙 PS:当压缩包文件量过大,前端可能会出问题(脑测,未…...
JVM调优
jvm调优步骤:1发现问题、2。定位问题、3.解决问题 jdk自带的命令行调优工具: 1. jps 查看正在运行的 Java 进程 jps -v 查看进程启动时的JVM参数 options 参数: -q:仅仅显示 LVMID(local virtual machine id&#x…...
【前端】【HTML】入门基础知识
参考视频:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>:一级标题,通常用于页面的主标题,字体较大且醒目。 <h2>:二级标题,用于副标题或主要章节标…...
Ubuntu桌面管理环境: GDM3,KDM,LightDM
介绍 Ubuntu是一个广受欢迎的Linux操作系统,拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3,KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境,…...
每天你好20250110(距离春节19天!!!)
亲爱的朋友们,大家早上好! 🌞 今晨乃 2025 年 1 月 10 日,星期五,农历乙巳[蛇]年十一月二十一日。祥蛇逸彩送祥,金乌喷薄耀世,晨晖破雾而来,恰似“赤日初升,其道大光”&…...
iOS 本地新项目上传git仓库,并使用sourceTree管理
此文记录的场景描述: iOS前期开发时,在本地创建项目,直至开发一段时间,初期编码及框架已完善后,才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库,可以使用终端,键入命令…...
计算机网络之---计算机网络的性能评估
计算机网络的性能评估是指通过各种标准和指标来衡量网络的工作效率和质量,进而对网络进行优化和改进的过程。评估的目标是确保网络能够满足预期的服务质量(QoS)和性能需求。常见的计算机网络性能评估指标包括带宽、延迟、吞吐量、丢包率等。 …...
对话|企业如何构建更完善的容器供应链安全防护体系
对话|企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起,容器技术和自动化成为软件开发中的必要手段,软件供应链也进入了自动化及 CI/CD 阶段。然而,容器技术和自动化虽然提升了软件的更新速度&…...
【SpringSecurity】二、自定义页面前后端分离
文章目录 1、用户认证流程AuthenticationSuccessHandler AuthenticationFailureHandlerSecurityFilterChain配置用户认证信息 2、会话并发处理2.1、实现处理器接口2.2、SecurityFilterChain配置 1、用户认证流程 AuthenticationSuccessHandler AuthenticationFailureHandler …...
在 Vue 3 集成 e签宝电子合同签署功能
实现 Vue 3 e签宝电子合同签署功能,需要使用 e签宝提供的实际 SDK 或 API。 e签宝通常提供针对不同平台(如 Web、Android、iOS)的 SDK,而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。 下面举个 &…...
基于华为ENSP的OSPF接口网络类型深入浅出(4)
本篇技术博文摘要 🌟 OSPF的接口在不同网络类型下的工作方式;不同网络类型下的报文通告方式深入浅出hub-spoke架构 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我是肾透侧视攻城狮,一名什么都会一…...
西电-算法分析-研究生课程复习笔记
24年秋的应该是张老师最后一次用卷面考试,他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的,上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念,考试也是考个人对这些的理解,还挺好玩的哈…...
音频数据增强:提升音频信号质量的多种技术
在音频处理和机器学习领域,音频数据增强是一种常用的技术,旨在通过对原始音频信号进行各种变换和处理,生成更多样化的训练数据。这不仅可以提高模型的鲁棒性,还能改善其在真实世界应用中的表现。本文将介绍几种常用的音频数据增强…...
如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程
简介 Caddy 是一个开源的 Web 服务器,它支持静态和现代 Web 应用程序,使用预定义的配置规则,并为所有链接的域名自动启用 HTTPS。Caddy 使用 GO 语言编写,提供了用户友好的配置指令,使你既可以将其用作 Web 服务器&am…...
python_excel列表单元格字符合并、填充、复制操作
读取指定sheet页,根据规则合并指定列,填充特定字符,删除多余的列,每行复制四次,最后写入新的文件中。 import pandas as pd""" 读取指定sheet页,根据规则合并指定列,填充特定字…...
基于GAN和RL的思想来训练对话生成
Paper https://arxiv.org/pdf/1701.06547.pdf 基于GAN和RL的思想来训练对话生成 Implementation https://github.com/jiweil/Neural-Dialogue-Generation/tree/master/Adversarial...
小米路由器IPv6 功能使用指南
本文不限于多层路由使用IPv6 的情况,提供解决IPv6 无法获取的更硬核的方法,需要有ssh 工具。(无安卓设备,测试环境win、mac、ios) 首先明确一点,就是如果想让你的设备得到GUA 地址,即访问 6.i…...
运放输入偏置电流详解
1 输入阻抗与输入偏置电路关系 在选择运放和仪表运放时,经常听到这样的说法:“需要非常高的输入阻抗”,事实上真实如此吗? 输入阻抗(更确切的说是输入电阻)很少会成为一个重要的问题(输入电容也…...
C++指针类型的基本理论和使用方式-学习记录
一、指针简概 (一)指针定义 指针(pointer)是“指向(point to)”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。其一,…...
Elasticsearch:使用 Playground 与你的 PDF 聊天
LLMs作者:来自 Elastic Toms Mura 了解如何将 PDF 文件上传到 Kibana 并使用 Elastic Playground 与它们交互。本博客展示了在 Playground 中与 PDF 聊天的实用示例。 Elasticsearch 8.16 具有一项新功能,可让你将 PDF 文件直接上传到 Kibana 并使用 Pla…...
计算机网络之---物理层设备
什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备,它们主要处理数据的转换、信号的传输与接收,而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡(N…...
【Duilib】 List控件支持多选和获取选择的多条数据
问题 使用Duilib库写的一个UI页面用到了List控件,功能变动想支持选择多行数据。 分析 1、List控件本身支持使用SetMultiSelect接口设置是否多选: void SetMultiSelect(bool bMultiSel);2、List控件本身支持使用GetNextSelItem接口获取选中的下一个索引…...
2025新春烟花代码(二)HTML5实现孔明灯和烟花效果
效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …...
如何在 Ubuntu 22.04 上集成 Collabora Online 教程
简介 在本教程中,我们将详细讲解如何在 Ubuntu 22.04 操作系统上安装 Collabora Online。 Collabora Online 是一个基于 LibreOffice 技术的开源办公套件。它提供了许多功能,其中最有用的一个功能是 Collabora 提供了 Word 文档、电子表格、演示文稿等…...
Linux系统启动jar包--Java8
启动命令及参数 1. 启动命令模板 nohup java \ -Xms512m \ -Xmx1024m \ -Xmn256m \ -XX:MetaspaceSize128m \ -XX:MaxMetaspaceSize256m \ -XX:UseG1GC \ -XX:InitiatingHeapOccupancyPercent45 \ -XX:PrintGCDetails \ -XX:PrintGCDateStamps \ -XX:PrintGCApplicationStopp…...
linux-定制化rpm(rpmbuild)
一. 引文: 为实现我们的快速安装,特定服务需求的服务部署需求, 我们选择了通过source编译后定制成rpm,存放至自定义yum仓库,通过yum工具规范化管理及部署服务。目前比较常用的rpm打包方式分别为rpmbuild和fpm(在rpmbui…...
面向对象分析与设计Python版 分析与设计概述
文章目录 一、软件工程概述二、分析与设计概述 一、软件工程概述 高质量软件系统的基本要求 架构性内聚可重用性可维护性可扩展性灵活性 软件开发过程模型:是指根据软件开发项目从开始到结束的一系列步骤和方法,建模为不同的模型。常见的有࿱…...
npm发布流程说明
一、进入要发布的项目根目录,初始化为npm包 npm initname:最重要的字段之一,项目名称(少于214个字节)。没有name和version不能进行安装; version:最重要的字段之一,项目版本。没有n…...
Nginx反向代理请求头有下划线_导致丢失问题处理
后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到,搜索之后发现nginx默认request的header中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: unders…...
计网C1C2C3答案自用
Chapter 1 Computer Network and the Internet Review Questions Solution R1. What is the difference between a host and end system? List several different types of end system. Is a Web server an end system? There is no difference between a host and an end …...