简单的文件加密和解密C/C++

版权声明:如有引用,请附上本文链接 https://blog.csdn.net/weixin_41374099/article/details/89046431

前言

这篇就是简单的C/C++练习,因为是以前做过的,所以就简单介绍下啦。

主要涉及的知识就是main函数参数,这篇我在Opencv学习开篇写过。
文件操作,这个也挺简单。

加密解密的思路是用二进制的形式读取文件,然后逐个字节异或一个数就是加密,再异或一次就是解密了。

C版本

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

//文件打开方式不一样
int main(int argc, char *argv[])
{
	if (argc < 2)
	{
		return 0;
	}
	//保存代加密或解密文件
	char fileNameBefore[256] = { 0 };
	char fileNameAfter[256] = { 0 };
	//1要求输入代加密或解密文件名
	/*printf("请输入代加密或解密文件名:"); 
	scanf("%s", fileNameBefore); */
	//2要求输入加密后文件名
	printf("请输入加密或解密后文件名:"); 
	scanf("%s", fileNameAfter);




	//3打开文件
	FILE *before = fopen(argv[1], "rb");//读|二进制
	FILE *after = fopen(fileNameAfter, "wb");//写|二进制


	//4获取文件大小
	fseek(before, 0, SEEK_END);//定位到文件末尾
	int size = ftell(before);//获取文件大小
	fseek(before, 0, SEEK_SET);//还原before位置



	//5加密或解密
	char temp;
	for (int i = 0; i < size; i++)
	{
		fread(&temp, 1, 1, before);//每次读一个二进制字节
		temp ^= 0x66;
		fwrite(&temp, 1, 1, after);//每次写一个二进制字节
	}



	//6关闭保存
	fclose(before);
	fclose(after);
	printf("加密或解密成功\n");
	return 0;
}

C++版本

#include<iostream>
#include<fstream>
using namespace std;
//using std::fstream;
//using std::streamoff;

int main(int argc, char *argv[])//argc是main内使用参数个数+1,argv[0]是文件路径,argv[1]是文件名
{
	if (argc < 2)
	{
		return 0;
	}
	fstream BeforeFile,AfterFile;//代加密或解密文件的流对象
	//保存代加密或解密文件
	char fileNameBefore[256] = { 0 }, fileNameAfter[256] = { 0 };;

	
	//1要求用户输入代解密或解密文件名
	/*printf("请输入代加密或解密文件名:");
	scanf("%s", fileNameBefore);*/
	//2要求用户输入加密后文件名
	printf("请输入加密或解密后的文件名:");
	scanf("%s", fileNameAfter);


	//3打开代加密或解密文件					
	BeforeFile.open(argv[1], ios::in | ios::binary);//读|字节流
	//4打开加密或解密后文件
	AfterFile.open(fileNameAfter, ios::out | ios::binary);
	
	

	//5获取代加密或解密文件大小	
	BeforeFile.seekg(0, ios::end);//3.1定位文件内容指针到末尾
	streamoff  size = BeforeFile.tellg();	//3.2获取大小
	BeforeFile.seekg(0, ios::beg);//3.3 定位文件内容指针到文件头
	

	

	////////6
	for (streamoff i = 0; i < size; i++){
		//把BeforeFile的内容处理后放入AfterFile中
		AfterFile.put(BeforeFile.get() ^ 0x88);//加密或解密编码  0x88 
	}
#if 0
	char temp;
	for (std::streamoff i = 0; i < size; i++)
	{
		//6逐字节读取
		temp = BeforeFile.get();
		//7加密
		temp ^= 0x88;
		//8写入解密后文件
		AfterFile.put(temp);
	}
#endif	

	//9关闭两个文件
	BeforeFile.close();
	AfterFile.close();
	printf("加密或解密成功\n");
	return 0;
}

显示效果:
图片、GIF、视频都可以。
注意,需要解密的话需要把文件后缀名写好。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41374099/article/details/89046431