标题:分享文件加密( 随机种子Key)
只看楼主
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
结帖率:94.64%
 问题点数:0 回复次数:8 
分享文件加密( 随机种子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 编辑 ]
收到的鲜花
  • 编译中。。2011-07-29 18:05 送鲜花  1朵   附言:为什么 我可以评分呢?
搜索更多相关主题的帖子: 文件加密 
2011-07-29 17:05
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
程序代码:
int main(void) {
    FILE * fpLyrics = fopen("Linkin Park - Iridescent.mp3", "rb");
    FILE * fpEncrypt = fopen("Encrypt.mp3", "wb");
    FILE * fpDecrypt = fopen("Decrypt.mp3", "wb");

    encrypting(fpLyrics, fpEncrypt);
    freopen("Encrypt.mp3", "rb", fpEncrypt);
    decrypting(fpEncrypt, fpDecrypt);

    fclose(fpLyrics);
    fclose(fpEncrypt);
    fclose(fpDecrypt);
    return 0;
}

试了下,MP3文件也可以。


[ 本帖最后由 lz1091914999 于 2011-7-29 18:21 编辑 ]

My life is brilliant
2011-07-29 17:45
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
.

My life is brilliant
2011-07-30 00:11
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:0 
支持一下,我试了下,能把文件中重复的一个字加密成不重复的乱码,太好了,以后文件的安全性不用愁了!!!
2011-07-30 12:33
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 4楼 stophin
那就好,有Bug别忘了告诉我哦。

My life is brilliant
2011-07-30 21:52
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
srand中的种子一样  rand产生的随机数数据永远一样的么
2011-07-31 17:13
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 6楼 草狼

恩。。

My life is brilliant
2011-07-31 17:16
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
得分:0 
来学习了。。。
2011-07-31 17:17
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 7楼 lz1091914999
学习了
2011-07-31 17:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-346389-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.935246 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved