分享文件加密( 随机种子Key)
程序代码:#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 128
#define KEY1 ((unsigned)47) // 用于设置随机种子,47可以改为其它的正整数
#define KEY2 66 // 用于与随机数取余,66可以改为其它的大于1的正整数
// KEY1和KEY2的改变可能会使每次加密后的文件有不同的数据,上面我是随便写的47和66
/* 加密算法:
1、用KEY1设置随机种子
2、文件中每隔1个字节都被置换为,取反 + rand() % KEY2
*/
// src(需要加密的文件) 打开模式为 "rb" & to(加密后的文件) 打开模式为 "wb"
void encrypting(FILE * src, FILE * to) {
char buf[BUFSIZE];
int readSize, i;
srand(KEY1);
do {
readSize = fread(buf, sizeof(char), BUFSIZE, src);
for(i = 0; i < readSize; i++) {
buf[i] = ~buf[i];
buf[i] += rand() % KEY2;
}
fwrite(buf, sizeof(char), readSize, to);
} while(!feof(src));
}
// src(已经加密的文件) 打开模式为 "rb" & to(解密后的文件) 打开模式为 "wb"
void decrypting(FILE * src, FILE * to) {
char buf[BUFSIZE];
int readSize, i;
srand(KEY1);
do {
readSize = fread(buf, sizeof(char), BUFSIZE, src);
for(i = 0; i < readSize; i++) {
buf[i] -= rand() % KEY2;
buf[i] = ~buf[i];
}
fwrite(buf, sizeof(char), readSize, to);
} while(!feof(src));
}
int main(void) {
FILE * fpLyrics = fopen("Lyrics.txt", "rb");
FILE * fpEncrypt = fopen("Encrypt.txt", "wb");
FILE * fpDecrypt = fopen("Decrypt.txt", "wb");
encrypting(fpLyrics, fpEncrypt);
freopen("Encrypt.txt", "rb", fpEncrypt);
decrypting(fpEncrypt, fpDecrypt);
fclose(fpLyrics);
fclose(fpEncrypt);
fclose(fpDecrypt);
return 0;
}
原理上看应该适用于16位32位或64位平台,而且可以用于不同格式的文件。
加密算法如果要破解的话,需要先把C标准库中的伪随机算法弄到手才行。
如果有问题请告诉我,谢谢。
改了一下代码,性能会将低少许,但为了防止 文件大小 % sizeof(int) != 0的情况。
[ 本帖最后由 lz1091914999 于 2011-7-31 17:43 编辑 ]










