王朝网络
分享
 
 
 

RC4加密解密source code(C code)

王朝other·作者佚名  2006-02-01
宽屏版  字体: |||超大  

#include<stdio.h>

#include<memory.h>

#include<string.h>

#include<stdlib.h>

#define buf_size 1024

typedef struct rc4_key

{

unsigned char state[256];

unsigned char x;

unsigned char y;

} rc4_key;

#define swap_byte(x,y) t = *(x); *(x) = *(y); *(y) = t

void prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key)

{

int i;

unsigned char t;

unsigned char swapByte;

unsigned char index1;

unsigned char index2;

unsigned char* state;

short counter;

state = &key->state[0];

for(counter = 0; counter < 256; counter++)

state[counter] = counter;

key->x = 0;

key->y = 0;

index1 = 0;

index2 = 0;

for(counter = 0; counter < 256; counter++)

{

index2 = (key_data_ptr[index1] + state[counter] + index2) % 256;

swap_byte(&state[counter], &state[index2]);

index1 = (index1 + 1) % key_data_len;

}

}

void rc4(unsigned char *buffer_ptr, int buffer_len, rc4_key *key)

{

unsigned char t;

unsigned char x;

unsigned char y;

unsigned char* state;

unsigned char xorIndex;

short counter;

x = key->x;

y = key->y;

state = &key->state[0];

for(counter = 0; counter < buffer_len; counter++)

{

x = (x + 1) % 256;

y = (state[x] + y) % 256;

swap_byte(&state[x], &state[y]);

xorIndex = (state[x] + state[y]) % 256;

buffer_ptr[counter] ^= state[xorIndex];

}

key->x = x;

key->y = y;

}

int main()

{

char seed[256]; //key in fact

char data[512];

char fname[512];

char *tn;

char buf[buf_size];

char digit[5];

int hex, rd,i;

int n;

rc4_key key;

FILE *fp,*des;

memset(fname,0,512*sizeof(char));

if((fp=fopen("key.txt","r"))==NULL)

exit(1);

fscanf(fp,"%s %s",data,fname);

fclose(fp);

if(strcmp(fname,"")==0)

{

fprintf(stderr,"can't find the name of the file for encryption.\n");

return 1;

}

n = strlen(data);

if(n>512)

{

fprintf(stderr,"can't tolerate key longer than 512 characters.\n");

return 1;

}

if (n&1) //n is odd number

{

strcat(data,"0");

n++; //convert n to even number

}

n/=2;

memset(digit,0,5*sizeof(char));

strcpy(digit,"AA");

for (i=0;i<n;i++)

{

digit[2] = data[i*2];

digit[3] = data[i*2+1];

sscanf(digit,"%x",&hex); //characters in the file key.txt are better to be recognizable hex numbers

seed[i] = hex; //only reserve the two lower hex numbers in varible 'hex'

}

prepare_key(seed,n,&key);

if((fp=fopen(fname,"r"))==NULL)

exit(1);

tn=strdup(fname);

strcat(fname,".en");

if((des=fopen(fname,"w"))==NULL)

exit(1);

rd = fread(buf,1,buf_size,fp);

while (rd>0)

{

rc4(buf,rd,&key);

fwrite(buf,1,rd,des);

rd = fread(buf,1,buf_size,fp);

}

fclose(fp);

fclose(des);

sprintf(fname,"rm %s",tn);

system(fname);

sprintf(fname,"mv %s.en %s",tn,tn);

system(fname);

}

旁注:

1. 此代码是在UNIX下编写调试的,其中用到了函数system()来调用系统命令,所以要在windows下运行可能需要一些修改。

2. 运行该代码需要先创建文件key.txt,文件格式如下:

key filename

其中key可以是任何字符串(如 “64M便当”),它是用来加密的原始密钥。

Filename是需要加密的文件的文件路径(绝对相对路径均可)(如 1.mpg或/home/chensj/2.jpg)。

3. 由于算法使用XOR对原始数据进行处理,所以只要用相同的密钥,对同一文件再次运行本程序即是对文件的解密。

4. 由衷的希望使用该程序的兄弟们,不要忘了宣传一下我“64M便当”的blog,多谢了:)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有