一个简单且安全的文件加密算法

来源:互联网 发布:百威pos9000软件下载 编辑:程序博客网 时间:2024/04/29 21:46

       如果你有秘密资料,不想别人看,那么你可以利用下面的加密解密方法(我们不妨假定文件不超过1G)。

       

       加解密原理:将文件中的0和1按照某种法则进行变化,代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define KEY 729520  // 加密密码#define FILE_NAME_MAX_SIZE 100  // 文件名长度// 变换法则int genFun(int size, int key, int i){return size + key + i - size / key;}// 获得文件大小int getFileSize(char str[]){FILE *fp = fopen(str, "rb");    fseek( fp, 0, SEEK_END );    int size =  ftell(fp);fclose(fp);return size;}// 文件加密void encrypt(char toBeEncFileName[], int key){char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};    strcat(newFileName, toBeEncFileName);FILE *fp1 = fopen(toBeEncFileName, "rb");FILE *fp2 = fopen(newFileName, "wb");int i, s, t, size = getFileSize(toBeEncFileName);for(i = 0; i < size; i++){s = getc(fp1);t = genFun(size, key, i) ^ s;  // 加密putc(t, fp2);}fclose(fp1);fclose(fp2);}int main(){printf("这是一个文件加密软件!\n");printf("请输入您的加密身份认证:");int key;scanf("%d", &key);if(KEY != key){printf("身份认证错误!\n");exit(1);}printf("请输入文件的文件名(包括后缀):");char fileName[FILE_NAME_MAX_SIZE];scanf("%s", fileName);encrypt(fileName, KEY);printf("加密完成!\n");return 0;}
      加密界面为:

    

       下面附上解密代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define KEY 729520  // 解密密码#define FILE_NAME_MAX_SIZE 100  // 文件名长度// 变换法则int genFun(int size, int key, int i){return size + key + i - size / key;}// 获得文件大小int getFileSize(char str[]){FILE *fp = fopen(str, "rb");    fseek( fp, 0, SEEK_END );    int size =  ftell(fp);fclose(fp);return size;}// 文件解密void decrypt(char toBeDecFileName[], int key){char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};    strcat(newFileName, toBeDecFileName);FILE *fp1 = fopen(toBeDecFileName, "rb");FILE *fp2 = fopen(newFileName, "wb");int i, s, t, size = getFileSize(toBeDecFileName);for(i = 0; i < size; i++){s = getc(fp1);t = genFun(size, key, i) ^ s; // 解密putc(t, fp2);}fclose(fp1);fclose(fp2);}int main(){printf("这是一个文件解密软件!\n");printf("请输入密码:");int key;scanf("%d", &key);if(KEY != key){printf("密码错误!\n");exit(1);}    printf("请输入文件的文件名(包括后缀):");char fileName[FILE_NAME_MAX_SIZE];scanf("%s", fileName);decrypt(fileName, key);printf("解密完成!\n");return 0;}