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

news/2024/7/3 12:24:26 标签: 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);
	else
		SetConsoleTextAttribute(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;
		}
		else
			printf("%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);
	else
		SetConsoleTextAttribute(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;
		}
		else
			printf("%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.niftyadmin.cn/n/5245374.html

相关文章

03_W5500TCP_Client

上一节我们完成了W5500网络的初始化过程&#xff0c;这节我们进行TCP通信&#xff0c;w5500作为TCP客户端与电脑端的TCP_Server进行通信。 目录 1.TCP通信流程图&#xff1a; tcp的三次握手&#xff1a; tcp四次挥手&#xff1a; 2.代码分析&#xff1a; 3.测试&#xff1a…

perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的&#xff0c;但是有一些多人合作的项目或者一些历史遗留代码&#xff0c;常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例&#xff1a; 477033f938fd47dfecde43c82257cd286d9fa38e &#xff0c; …

我们一起聊一聊JWT的那些事

我们一起聊一聊JWT的那些事 一切美好&#xff0c;如期而至… 什么是JWT JWT&#xff0c;全称为 JSON Web Token&#xff0c;是一种用于在网络上安全地传递信息的开放标准&#xff08;RFC 7519&#xff09;。JWT 是一种紧凑且独立的方式&#xff0c;用于在各方之间以 JSON 对象…

如何安装Wnmp并结合内网穿透实现外网远程访问内网服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

dbug_hub 错误 使用多个ILA导致

记录一下vivado调整dbg_hub时钟调整的方法 (dengkanwen.com) 解决方法参考以上链接。 或&#xff0c;使用高速下载器&#xff1f;

网工内推 | 国企网工、运维,厂商认证优先,13薪,带薪年假

01 中百集团 招聘岗位&#xff1a;运维工程师 职责描述&#xff1a; 1、对集团内使用云计算架构&#xff08;Kubernetes&#xff09;的系统进行规划、运维及管理相关工作。 2、对集团数据中心系统的大数据基础架构&#xff08;Cloudera Distribution Hadoop&#xff09;的规划…

让 ChatGPT 永远重复输出一个词,它就能告诉你很多秘密数据?国内的大模型表现如何?

文章目录 让 ChatGPT 永远重复输出一个词&#xff0c;它就能告诉你很多秘密数据&#xff1f;国内的大模型表现如何&#xff1f;文心一言通义千问百川智能智普清言moonshot星火附件ChatGPT Data Extraction Example 让 ChatGPT 永远重复输出一个词&#xff0c;它就能告诉你很多秘…

instanceof原理解析

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 ​ 语法 object instanceof Constructorobject //某个实例对象 Constructor //某个构造函数实例验证 验证的过程中会使用Object.getPrototypeOf(Object)&#xff0c;Object.getProtot…