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

news2024/11/26 1:58:37
  • 🚩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.coloradmin.cn/o/1292158.html

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

相关文章

系列学习前端之第 3 章:一文精通 css

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 一、CSS基础 1. CSS简介 CSS 的全称为&#xff1a;层叠样式表 ( Cascading Style Sheets ) 。 CSS 也是一种标记语言&#xff0c;用于给 HTML 结构设…

电脑搜不自己的手机热点,其余热点均可!

一、现象&#xff1a; 之前可正常连接&#xff0c;突然间发现收不到自己的WiFi信号&#xff0c;其余人均可收到。通过重复手机电脑关机、改变热点设置中的频段等方式均没解决&#xff0c;同事电脑和手机可搜索到我的WiFi。 二、问题&#xff1a; WiF驱动程序更新 三&#x…

js vue 输入正确手机号/邮箱后,激活“发送验证码”按钮

按钮禁止点击状态&#xff1a; 按钮能够点击状态&#xff1a; 我采用的方式是监听手机号/邮箱输入框的输入事件&#xff0c;即实判断用户输入的数据是否满足规则&#xff0c;如果满足手机号/邮箱规则&#xff0c;则激活“获取验证码”按钮。 话不多说&#xff0c;上代码 样式…

数据结构与算法-D7栈实现及应用

顺序栈 具有顺序表同样的存储结构&#xff0c;由数组定义&#xff0c;配合用数组下标表示的栈顶指针top完成操作 sqstack.h stack_creat stack_push stack_empty stack_full 1、判断栈是否为空 2、top--&#xff0c;取&#xff1a;data[top1] stack_top stack_clear stack_fre…

加密系统,您的数据安全守护者,助您远离泄露风险!

随着云计算、大数据等技术的快速发展&#xff0c;企业在技术升级&#xff0c;业务上云的同时&#xff0c;也面临着来自互联网的各类安全威胁&#xff0c;并且导致数据信息的泄露。企业数据安全问题几乎为新时代人的焦虑又添上了一把火&#xff0c;面对形形色色的网络攻击手段&a…

每日一练2023.12.7—— 情人节【PTA】

题目链接&#xff1a;L1-035 情人节 题目要求&#xff1a; 以上是朋友圈中一奇葩贴&#xff1a;“2月14情人节了&#xff0c;我决定造福大家。第2个赞和第14个赞的&#xff0c;我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单&#xff0c;请你找出…

【Vue】学习路线图(VIP珍藏版)

爆肝三天,整理了下Vue的常用内容, 穿插开发过程中遇到的问题与总结, 后期不定期更新[开发遇到的问题与小结]到本文章中, 欢迎各位大佬指正~ 目录 HTML、CSS和JavaScript基础知识 HTML标记语言 HTML (HyperText Markup Language) HTML5: 最新版本的 HTML CSS样式 JavaS…

357. 统计各位数字都不同的数字个数

357. 统计各位数字都不同的数字个数https://leetcode.cn/problems/count-numbers-with-unique-digits/ 当 n 0 时&#xff0c; &#xff0c; 只有这一种选择&#xff0c; 当 n 1 时&#xff0c; , 有 种选择 当 n2 时&#xff0c; 的选择可以由两部分构成&#…

Java程序员,你掌握了多线程吗?【文末送书】

目录 摘要 01、多线程对于Java的意义 02、为什么Java工程师必须掌握多线程 03、Java多线程使用方式 04、如何学好Java多线程 参与方式&#x1f947; 推荐一个人工智能学习网站 https://www.captainbed.cn/bear 摘要 互联网的每一个角落&#xff0c;无论是大型电商平台的…

前端笔记(三)CSS 盒子模型

结构伪类选择器 基本的结构伪类选择器 可以根据元素的结构关系来查找元素 比如列标签 li&#xff0c;使用 li:first-child { background-color: green; }就可以选中第一个该标签。 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

一键搭建你的hnust请假条

hnust请假条 湖南科技大学请假条生成器 https://hnust.rick.icu/new &#xff08;直接使用&#xff09; Hnust Leave Note 去github https://github.com/rickhqh/hnust_leave_note 效果展示 界面展示效果图 v2.0 更新 vant和vue重构了整个源码同步学校新版请假条样式修复了…

Python-调试

左下角有相关的操作 断点&#xff1a;鼠标右键点击行 左下角为函数的调用栈 单步按F7

基于LSTM和N-gram序列的英文文本生成(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

HXDSP2441-地址空间转换

地址空间转换 地址空间本身很简单&#xff0c;但由于HXDSP2441同时有DSP核和CPU核&#xff0c;且二者寻址方式不同&#xff0c;导致编程中会有歧义。 DSP核采用字地址编址方式&#xff0c;CPU核和总线空间内都采用字节地址编址方式&#xff0c;而且文档中所涉及的所有寄存器地…

Angular 由一个bug说起之三:为什么时不时出现额外的水平/垂直滚动条?怎样能更好的防止它的出现?

目录&#xff1a; 什么是单元溢出 控制滚动条出现的属性 怎样能减少意外的滚动条出现 一、什么是单元溢出 在说到这个问题之前我们先简单阐述一下视图窗口(Viewport)和视图内容(View Content) 视图窗口简单来说就是呈现内容的视口&#xff0c;浏览器就是一个窗口&#xff…

RabbitMQ(一)概述

1 RabbitMQ 概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ 是一个快递站…

一文搞懂系列——你真的了解如何生成动态库了吗?

引言 动态库的编译&#xff0c;这有什么难度&#xff0c;这不是手到擒来的事情吗&#xff1f;无非不就是&#xff1a; gcc -FPIC -shared -o libxxx.so *.o *.c 我若是提出这些需求场景&#xff0c;阁下又如何应对呢&#xff1f; 动态库A依赖其他部分提供的能力。但是却不…

IT外包对中小企业的独特优势

在竞争激烈的商业环境中&#xff0c;企业的发展稍有缓慢&#xff0c;就很有可能被竞争对手快速赶超、趁机抢占市场。一些中小企业为了更好地应对市场变化和提高自身竞争力&#xff0c;越来越多地转向了IT外包服务。相较于大型企业&#xff0c;中小企业在选择IT外包时能够获得一…

SSL证书代理

众所周知&#xff0c;SSL证书已经成为当下网络安全中不可或缺的一个环节&#xff0c;对于很多开发公司来说&#xff0c;给自己的客户提供SSL证书安全服务也是最为基础的。 但是目前市面上像阿里云之类的证书服务商对于开发公司需要的证书并没有太大的一个优惠政策&#xff0c;给…

一:C语言常见概念

一&#xff1a;C语言常见概念 1.认识C语言&#xff1a; ​ C语言是人和计算机交流的语言 ​ C语言是一门面向过程的语言&#xff0c;而C&#xff0c;Java&#xff0c;Python等是一门面向对象的语言 ​ 软件开发&#xff08;项目&#xff09;&#xff1a;面向过程面向对象 …