4455159211 发表于 2022-3-16 10:02

简易加密解密文件工具

背景: 之前一个客户需要加密解密他自己的工作文件,所以请我编写了一个小工具,当时为了快速弄完所以就用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;
}

mudlib 发表于 2022-5-1 23:31

好东西必须要支持!

sjzdevin 发表于 2022-8-30 09:58

这也是个好方法{:1_927:}

LYCYX 发表于 2022-11-13 00:29

可以帮忙弄一份python版本的吗,不懂C和java{:1_936:}

aft705 发表于 2023-10-18 15:07

神奇的代码,这样也能搞定文件加密。

DDDY 发表于 2023-10-19 18:44

太强了,原来这样也可以。感谢楼主。
页: [1]
查看完整版本: 简易加密解密文件工具