简易加密解密文件工具
背景: 之前一个客户需要加密解密他自己的工作文件,所以请我编写了一个小工具,当时为了快速弄完所以就用Java写的UI与算法,打包成JAR给他使用的,本来核心代码不多,但要运行Java代码就需要JRE环境,所以导致打的包很大.改进: 这次我将小工具的算法用C语言重新编写了,目前在macOS上测试通过, 预计Linux也可以的, Windows没有尝试.
算法: 对文件的每个byte进行反码一次为加密,再次反码则解密,没有添加其他更复杂的算法,所以比较简易.
说明: 1. 加密解密后的扩展名未自动添加 2. 暂没有对文件夹加密与解密3. C语言新手,请赐教,谢谢~~~
效果图:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#define MAX_SIZE 300 //字符数组大小
#define BUFFERSIZE 1024 * 1024
// 取得文件大小
int file_size(char *filename) {
struct stat statbuf;
stat(filename, &statbuf);
int size = statbuf.st_size;
return size;
}
// 加密文件
int encryptionFile() {
char file_name = { 0 }; // 原始文件名及路径
char file_name_new = { 0 }; // 加密后文件名及路径
int oldFileAllTotalSize = 0; // 原始文件大小
int index = 0, *out = 0;
int encryByte = 0;
printf("请输入或拖入要加密文件名及路径:");
scanf("%s", &file_name);
strcpy(file_name_new, file_name);
strcat(file_name_new, "_new");
printf("原始文件名: %s\n加密后文件名: %s\n", file_name, file_name_new);
int totalcount = 0;
//读取文件写入文件
FILE *oldFile = fopen(file_name, "rb"); // r:只读 , b:二进制
//获取文件的大小
if (!oldFile) {
printf("文件不存在!\n");
return -1;
}
oldFileAllTotalSize = file_size(file_name);
printf("文件总大小: %d\n", oldFileAllTotalSize);
FILE *newFile = fopen(file_name_new, "wb+"); // w:可写 , b:二进制 +:不存在则创建
char buf;
int len = 0;
while (!feof(oldFile)) {
len = fread(buf, 1, BUFFERSIZE, oldFile);
if (len >= 0) {
totalcount += len;
for (index = 0; index < len; index++) {
out = &buf;
encryByte = ~*out; // byte首次取反加密,再次取反则解密
fwrite(&encryByte, 1, 1, newFile);
}
printf("处理进度:%.2f%s\n", ((float) totalcount / (float) oldFileAllTotalSize) * 100, "%");
}
}
fclose(oldFile);
fclose(newFile);
printf("完成加密或解密!!! 处理后文件路径: %s\n\n", file_name_new);
encryptionFile();
}
int main(void) {
encryptionFile();
return 0;
}
好东西必须要支持! 这也是个好方法{:1_927:} 可以帮忙弄一份python版本的吗,不懂C和java{:1_936:} 神奇的代码,这样也能搞定文件加密。 太强了,原来这样也可以。感谢楼主。
页:
[1]