C语言文字加密程序的实现

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事


640?wx_fmt=jpeg

作者

De掉所有bug

原文首发

https://blog.csdn.net/weixin_41676881/article/details/82917062

已获原作者授权,如需转载,请联系我们。


前言:当今社会是一个信息社会,你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着,那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢?下面就给大家提供一个原理极其简单程序极其容易实现的C语言文字加密小程序的实现算法。


原理:ASCLL码的加减乘除运算。举一个最简单的例子,从键盘输入一行字符"LANGUAGE",将所有字符的ASCLL码加1后再打印出来就变成了"MBOHVBHF",将所有字符的ASCLL码加2,则打印出来是"NCPIWCIG",试问从打印出来的字符串的字里行间谁还可以一眼就看出最初想要传达的信息是"LANGUAGE"?同理,将加密文字所有字符的ASCLL码减1再打印出来就可以实现对加密文字的翻译,例如将"MBOHVBHF"中每个字符的ASCLL码都减1再打印出来就可以还原出"LANGUAGE"。


如果你足够聪明,可以看出"MBOHVBHF"是"LANGUAGE"中的所有字母在英文字母表里的顺序后移一位形成的、"NCPIWCIG"是"LANGUAGE"中的所有字母在英文字母表中的顺序后移两位形成的,那么请大家再来看一下汉字的情况。


我在键盘上录入了"今天晚上我不回家吃饭了",将这串字符的ASCLL码全部加1,打印出来是这样的"掘晚晤市嫌臣假接凑负绿"。怎么样,哈哈哈,是不是看完后丈二和尚摸不着头脑?所以,用这种算法实现对汉字的加密和翻译绝对隐蔽!汉字在计算机中的编码比较复杂,一个汉字在Windows 10系统下的CodeBlocks编译器里占2个字符的位置,我记得我有做过测试,在Cent OS Linux系统下占3个字符的位置。然而不管一个汉字占几个字符的位置,对每个字符的ASCLL码做加减乘除的运算和逆运算就可以实现对文字的加密和翻译。


下面向大家展示一下源代码(加密算法为将所有字符的ASCLL码加1,翻译算法为将所有字符的ASCLL码减1):


头文件部分:

//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED

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

void creat(char txt[])
{
   for(int i=0;i<strlen(txt);i++)
   {
   txt[i]+=1;
   }
   printf("生成的加密文字为:%s\n",txt);
}
void trans(char txt[])
{
   for(int i=0;i<strlen(txt);i++)
   {
       txt[i]-=1;
   }
   printf("解密后文字为:%s\n",txt);
}

#endif // TRANS_H_INCLUDED


主函数部分:

#include "Trans.h"

void main()
{
   char txt[1024];
   int choice;

   printf("---------------欢迎使用译码机!---------------\n");
   printf("****************************************************\n");
   printf("生成加密文字请输入1      翻译加密文字泣请输入2\n");
   printf("退出程序请输入0\n");

   while(1)
   {
       printf("****************************************************\n");
       printf("请输入您的选择:");
       scanf("%d",&choice);
       fflush(stdin);
       switch(choice)
       {
       case 1:
           printf("请输入文字:");
           gets(txt);
           creat(txt);
           break;
       case 2:
           printf("请输入加密文字:");
           gets(txt);
           trans(txt);
           break;
       case 0:
           printf("退出成功!\n");
           exit(0);
       default:
           printf("您的输入有误,请重新输入!\n");
       }
       system("pause");
   }
}


下面向大家展示一下加密与翻译的效果:

640?wx_fmt=png


思考与提高:仅仅将所有字符的ASCLL码加1就实现对文字信息的加密了,会不会很容易被破译呢?请恕博主我不是密码学专家,这一点我无法回答,但是直观感觉这样加密确实有点简单。那么我们就可以对字符进行多种更为复杂的处理,比如给所有字符加上一个正负变换的数列、给所有字符加上斐波那契数列等。总之,直观感觉就是越复杂越不容易被破译。


下面向大家展示一下给所有字符加上一个正负变换的数列的加密算法的源代码:


头文件部分:

//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED

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

void creat(char txt[])
{
   int f=1;
   for(int i=0;i<strlen(txt);i++)
   {
   txt[i]+=f;
   f=-f;
   }
   printf("生成的加密文字为:%s\n",txt);
}
void trans(char txt[])
{
   int f=-1;
   for(int i=0;i<strlen(txt);i++)
   {
       txt[i]+=f;
       f=-f;
   }
   printf("解密后文字为:%s\n",txt);
}

#endif // TRANS_H_INCLUDED


主函数部分主要是用来调试的,与上面那个简单加密算法的主函数部分相同。


下面向大家展示一下使用这种复杂加密算法加密与翻译的效果:

640?wx_fmt=png


用了加密程序后,画风是这样的:

640?wx_fmt=jpeg

640?wx_fmt=jpeg


本文首发于CSDN博客,详见文末「阅读原文」


- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang

推荐阅读:

640?wx_fmt=gif

print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值