【C语言】程序设计加密解密

  • 🚩write in front🚩   

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、个人社区人数累计4w+、全网访问量100w+🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 2 月 22 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:YY_謓泽的博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩

目录

🚩write in front🚩   

Page

⒈题目内容

⒉题目要求

⒊程序的加密 & 解密

方案①

方案② 

⒋程序代码 

Code①

Code② 

⒌代码运行视频

⒍总结

Page

在设计程序的时候为了防止一些敏感信息倍泄漏的时候,通常需要对这些信息进行加密的时候,以用户的的登录密码为例,如果密码以明文(密码)的形式存储在数据表当中,就会很容易被人发现。相反,如果密码以密文的形式进行存储的话,即使别人从数据表当中发现了密码,这也是加密之后的密码。

⒈题目内容

设计一个主函数[main]

循环语句设置一个无限循环

声明两组数组分别用来存放加密字符(encypt_str)解密字符(decode_str)

⒉题目要求

用户进行某一个操作需要输入一个命令,如果命令输入错误,系统会进行提示(设计菜单)

当用户输入命令字符"0"要求用户进行输入加密的字符

当用户输入命令字符"1"会显示加密字符新的加密字符

当用户输入命令字符"2"会对刚加密的文件来进行解密

当用户输入命令字符"3"退出当前的程序设计应用程序

⒊程序的加密 & 解密

加密⇢这里我们可以设置两种不同的加密方法供大家参考选择如下所示[↓]

方案①

¹将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+偏移量⒌

方案② 

²将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+随机值(1~10)

拓展知识点⇢你也可以在上面原有的基础上进行优化哟(●'◡'●)

⒋程序代码 

Code①

¹将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+偏移量⒌

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
unsigned int g_Count = 0;
void color(short x)
{if (x >= 0 && x <= 15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void menu()
{color(0);system("cls");color(1);printf("|-------★<<<<<<<   加密&解密   >>>>>>> ★------|\n");color(10);printf("|-------★ 0.要求用户进行输入加密的字符 ★------|\n");printf("|-------★ 1.会显示加密字符新的加密字符 ★------|\n");printf("|-------★ 2.会对刚加密的文件夹进行解密 ★------|\n");printf("|-------★ 3.退出当前的程序设计应用程序 ★------|\n");
}
enum Commond_str
{Encryption = 0,New_Encryption = 1,Decode = 2,Exit = 3,
};
/*会显示加密字符新的加密字符方案一功能:将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+偏移量⒌
*/
void new_Encryption(int Count, char* len, char* decode_str)
{int i = 0;Count = strlen(len);for (i = 0; i < Count; i++){decode_str[i] = len[i] + i + 5;}printf("%s\n", decode_str);
}
int main(void)
{unsigned int Count = 0, Commond = 0;char password[10] = { 0 };char encypt_str[20] = { 0 };//加密字符char decode_str[40] = { 0 };//解密字符int numbers = 0;while (g_Count < 3){printf("No.%d:如需要帮助请输入[help]->", g_Count + 1);scanf("%s", password);if (strcmp("help", password) == 0){menu();break;}elseprintf("%d.Your input !(help)", g_Count + 1);printf("\n");if (g_Count == 3){printf("Fool Your str error!exit");break;}g_Count++;}g_Count = 1;while (1){printf("No.%d:Please input Commond:", g_Count++);scanf("%d", &Commond);switch (Commond){case Encryption:scanf("%s", encypt_str); printf("Your input encypt_str:%s\n", encypt_str); break;case New_Encryption:new_Encryption(Count, encypt_str, decode_str); break;//第一种方案case Decode:printf("encypt_str:%s\n", encypt_str); break;//注:解密以后的字符就是加密case Exit:printf("Exit:kk提醒您~\n"); break;}if (Commond == Exit)break;}return 0;
}

Code② 

²将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+随机值(1~10)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
//随机值需要的两种库函数头文件
#include<time.h>
#include<stdlib.h>
unsigned int g_Count = 0;
void color(short x)
{if (x >= 0 && x <= 15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void menu()
{color(0);system("cls");color(1);printf("|-------★<<<<<<<   加密&解密   >>>>>>> ★------|\n");color(10);printf("|-------★ 0.要求用户进行输入加密的字符 ★------|\n");printf("|-------★ 1.会显示加密字符新的加密字符 ★------|\n");printf("|-------★ 2.会对刚加密的文件夹进行解密 ★------|\n");printf("|-------★ 3.退出当前的程序设计应用程序 ★------|\n");
}
enum Commond_str
{Encryption = 0,New_Encryption = 1,Decode = 2,Exit = 3,
};
/*会显示加密字符新的加密字符方案二功能:将字符串中每个字符加上它在字符所在的位置(默认最开始的字符为"1"开始)+随机值(1~10)
*/
void new_Encryption(int Count, char* len, char* decode_str,int randNumber)
{int i = 0;Count = strlen(len);for (i = 0; i < Count; i++){decode_str[i] = len[i] + i + randNumber;}printf("%s\n", decode_str);
}
int main(void)
{srand((unsigned)time(NULL));int randNumber = rand() % 10 + 1;unsigned int Count = 0, Commond = 0;char password[10] = { 0 };char encypt_str[20] = { 0 };//加密字符char decode_str[40] = { 0 };//解密字符int numbers = 0;while (g_Count < 3){printf("No.%d:如需要帮助请输入[help]->", g_Count + 1);scanf("%s", password);if (strcmp("help", password) == 0){menu();break;}elseprintf("%d.Your input !(help)", g_Count + 1);printf("\n");if (g_Count == 3){printf("Fool Your str error!exit");break;}g_Count++;}g_Count = 1;while (1){printf("No.%d:Please input Commond:", g_Count++);scanf("%d", &Commond);switch (Commond){case Encryption:scanf("%s", encypt_str); printf("Your input encypt_str:%s\n", encypt_str); break;case New_Encryption:new_Encryption(Count, encypt_str, decode_str,randNumber);break;//第二种方案case Decode:printf("encypt_str:%s\n", encypt_str); break;//注:解密以后的字符就是加密case Exit:printf("Exit:kk提醒您~\n"); break;}if (Commond == Exit)break;}return 0;
}

⒌代码运行视频

运行结果程序设计加密&解密

说明↠方案二和方案一只是会显示加密字符新的加密字符功能不同其它一样。

⒍总结

        总结⇨在上述程序对于初学者来说可能会有一定的难度,难度实际上并不是代码的本身。而是有很多库的函数需要我们去了解要学会怎么去使用他们,对于初学者来说是一个不错的练习的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想要精通GO语言?这些网站是你的最佳选择!

介绍&#xff1a;Go&#xff08;又称 Golang&#xff09;是由 Google 的 Robert Griesemer&#xff0c;Rob PGo&#xff08;又称 Golang&#xff09;是由 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。它在2009年11月10…

【网络编程】-- 01 概述、IP

网络编程 1 概述 1.1 计算机网络 (连接分散计算机设备以实现信息传递的系统) 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&…

23款奔驰E350eL升级小柏林音响 13个扬声器 590w

小柏林之声音响是13个喇叭1个功放&#xff0c;功率是590W&#xff0c;对应普通音响来说&#xff0c;已经是上等了。像著名的哈曼卡顿音响&#xff0c;还是丹拿音响&#xff0c;或者是BOSE音响&#xff0c;论地位&#xff0c;论音质柏林之声也是名列前茅。 升级小柏林音响&#…

PHPstudy小皮的数据库打开失败问题解决

如果你的MYSQL服务启动后停止&#xff0c;多次重启依然无法解决的情况下&#xff0c;大概率是和本地mysql冲突了 但是&#xff0c;千万不要卸载掉本地mysql&#xff0c;只需要在服务中停止本地mysql即可 将此服务关闭&#xff0c;小皮的mysql即可使用

ES6中的继承,String类型方法的拓展

ES6中的继承&#xff1a; 主要是依赖extends关键字来实现继承&#xff0c;使用了extends实现继承不一定要constructor和super&#xff0c;因为没有的话会默认产生并调用它们。 在实现继承时&#xff0c;如果子类中有constructor函数&#xff0c;必须得在constructor中调用一下s…

[python库] mistune库的基本使用

前言 mistune库是一个解析Markdown的利器&#xff0c;使用起来非常简单。当我们想要解析Markdown格式的文档时&#xff0c;只需两步就能将其转换成html格式。如下&#xff1a; import mistune mistune.html(YOUR_MARKDOWN_TEXT)安装方式也非常简单&#xff0c;dddd&#xff1…

Java毕业设计源码—vue+SpringBoot图书借阅管理图书馆管理系统

主要技术 SpringBoot、Mybatis-Plus、MySQL、Vue3、ElementPlus等 主要功能 管理员模块&#xff1a;注册、登录、书籍管理、读者管理、借阅管理、借阅状态、修改个人信息、修改密码 读者模块&#xff1a;注册、登录、查询图书信息、借阅和归还图书、查看个人借阅记录、修改…

使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹

环境: Inno Setup 6.6 Win10 专业版 问题描述: 使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹 将文件api-ms-win-shcore-scaling-l1-1-1.dll复制到system32里面 解决方案: 1.由于安全和权限的限制,直接在Inno Setup脚本中复制文件到C:\…

工作中常用的RabbitMQ实践

目录 1.前置 2.导入依赖 3.生产者 4.消费者 5.验证 验证Direct 验证Fanout 验证Topic 1.前置 安装了rabbitmq&#xff0c;并成功启动 2.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

Linux查看命令的绝对路径

linux查看命令的绝对路径 在Linux中&#xff0c;可以使用以下命令来查看命令的绝对路径&#xff1a; 1、which 命令名 例如&#xff0c;要查看chronyc命令的绝对路径&#xff0c;可以运行&#xff1a; which chronyc 2、whereis 命令名 例如&#xff0c;要查看chronyc命令…

Python-关系运算符详解

关系运算符&#xff1a;比较两个操作数的大小或者相等关系 < > ! 1、关系运算符的关系表达式返回值是布尔类型bool 成立就是真&#xff0c;即1&#xff1b;不成立就是假&#xff0c;即0 2、关系运算符还可以比较字符 字符根据字典序比较&#xff0c;先看首字母在…

SolidWorks Simulation 有限元分析-升降架分析

问题描述&#xff1a;一个载重为 1800N 的升降架承受一外部水压柱筒的作用&#xff0c;该水压柱筒与基座上的滑块相连。 1. 打开零件。 2. 我们新建一个静应力分析的算例&#xff0c;如下图所示。 3. 设置材料。我们需要为模型指定模型的材料属性。点击选中模型&#xff0c;鼠…