如何将自己的文件进行加密?一个小程序的教你搞定

        最近在B站学了一个小技巧,写一个小程序来将自己的文件进行加密,这篇文章就用C语言来分享给大家。

        首先我们知道,不管是什么文件,对电脑来说都只是一推0101的二进制数,既然这样,我们是不是可以将里面的二进制数读出来,然后按照一定的算法来让它变成别的乱码,这样当你打开的文件的时候就会识别不了了。如果想要重新打开文件,只需要按照算法把它还原回去就可以了。

        接下来让我们来实现一下吧!!

首先我们先打开一个文件:

char filename[256] = ""; //文件路径的字符串 
FILE *fp = NULL;

printf("请输入要加密/解密的文件路径:\n");
gets(filename);
	
if((fp = fopen(filename, "rb")) == NULL)//判断文件是否存在
{
	printf("路径不正确!\n");
	exit(0);
}

然后我们给他一个密码:

char password[12] = "123456";   //存放密码的指针,最长为12位

printf("文件存在,请输入密码:\n");
scanf("%s", password);
pwdlen = (int)strlen(password);  //记录密码的长度

if(0 == pwdlen)  //判断密码长度是否为零
{
	printf("sorry,密码长度不能为零\n");
	exit(1);
}

然后就是把打开的文件一个字符一个字符的读出来,再逐一进行加密,然后存进一个临时文件,这里的加密算法可以根据自己来定,想怎么玩就怎么玩,但是要知道还原回去的算法哦,不然文件就.........

FILE *fptemp = NULL;
const char tempfile[256] = "temp1234567890.temp";
int i = 0;
char ch = '0';

fptemp = fopen(tempfile, "wb"); //创建一个临时文件,将加密后的字符存进去
	
while(1)
{
	ch = fgetc(fp);
	if(feof(fp))  //如果文件读出来完了,就结束加密
	{
		break;
	}
	ch^=password[i++]; //加密算法,这里用按位异或
	fputc(ch, fptemp); //加密内容存到临时文件中
	if(i == pwdlen)   //密码用完了就循环使用
	{
		i = 0;
	}
}

最后一步就是将原文件删掉,再将加密后的临时文件名称改成原文件的名称就可以啦。

fclose(fp);
fclose(fptemp);
remove(filename);
rename(tempfile, filename);
printf("恭喜你加密成功\n"); 

        这样就大功告成啦,小伙伴们注意哦,因为这里用的是加密算法只是异或,所以解密的话只需要再对文件执行一个这个程序,输入加密一样的密码就可以啦。

        但是如果你的加密算法是不可逆的话,你就要重新设计一个解密的程序咯。

我们来看看效果: 

        这是一张图片:

 给它进行加密:

 然后打开就会变成这样:

 

下面附上源码(这段代码并不是我自己写的,只是从B站上学的时候抄下来的,最近再学网络安全,大家一起加油吧):

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

/*打开一个文件或者目录*/

char filename[256] = "";   //文件路径的字符串 
FILE *fp = NULL;
FILE *fptemp = NULL;
char password[12] = "123456";
const char tempfile[256] = "temp1234567890.temp";
int pwdlen = 0;
int i = 0;
char ch = '0';
	
void menu();
void inputpass(char* pass);

void menu()
{
	printf("*******************************\n");
	printf("**********加密小程序***********\n");
	printf("*******************************\n");
	
	printf("请输入要加密/解密的文件路径:\n");
	gets(filename);
	
	if((fp = fopen(filename, "rb")) == NULL)
	{
		printf("路径不正确!\n");
		exit(0);
	}
	printf("文件存在,请输入密码:\n");
	scanf("%s", password);
	pwdlen = (int)strlen(password);
	
	if(0 == pwdlen)
	{
		printf("sorry,密码长度不能为零\n");
		exit(1);
	}
	
	fptemp = fopen(tempfile, "wb"); 
	
	while(1)
	{
		ch = fgetc(fp);
		if(feof(fp))
		{
			break;
		}
		ch^=password[i++]; 
		fputc(ch, fptemp);
		if(i == pwdlen)
		{
			i = 0;
		}
	}
	
	fclose(fp);
	fclose(fptemp);
	remove(filename);
	rename(tempfile, filename);
	printf("恭喜你加密成功\n"); 
} 
void inputpass(char* pass)
{
	scanf("%s", pass);
	
}


int main()
{
	menu();
	
	return 0;
	
	
 } 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值