简单的文件加密和解密C/C++
前言
这篇就是简单的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、视频都可以。
注意,需要解密的话需要把文件后缀名写好。