| « | February 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| 公告 |
|
| Blog信息 |
|
blog名称:Mr.Sun 日志总数:7 评论数量:22 留言数量:1 访问次数:54459 建立时间:2006年3月9日 |

| |
|
[密码技术]RC4流密码算法 原创空间, 软件技术
小骏 发表于 2006/3/9 20:19:59 |
|
RC4流密码算法应该说还是不错的.呵呵.
首先,流密码比块密码要方便,不存在加密文件前后文件大小不一致的情况.至少看起来比较正常.哈哈.
RC4算法的优点也非常明显,速度很快.
也是用C语言实现.
#include <stdio.h>#include <string.h>
//此程序为RC4流密码算法的实现int is_Sourcepathright(char *source_path);int is_Destpathright(char *dest_path);int Check(int argc,char **argv);int Crypt(char *sourcepath,char *destpath,char *key);int Decrypt(char *sourcepath,char *destpath,char *key);
int main(int argc,char **argv){ if (Check(argc,argv)==0){ return -1; } if (argv[4][0]=='e'||argv[4][0]=='E'){ if(Crypt(argv[1],argv[2],argv[3])) return 1; else return -1; } if (argv[4][0]=='d'||argv[4][0]=='D'){ if(Crypt(argv[1],argv[2],argv[3])) return 1; else return -1; } return -1;}
int is_Sourcepathright(char *source_path){ FILE *fp; if ((fp=fopen(source_path,"rb"))==NULL){ printf("您所输入的文件不存在."); fclose(fp); return 0; } else{ fclose(fp); return 1; }}
int is_Destpathright(char *dest_path){ FILE *fp; if ((fp=fopen(dest_path,"wb"))==NULL){ printf("输入的路径不正确."); fclose(fp); return 0; } else{ fclose(fp); return 1; }}
int is_InputKeyRight(char *inputkey){ if(strlen(inputkey)<=256&&strlen(inputkey)>0) return 1; else return 0;}
int Check(int argc,char **argv){ if(argc!=5){ printf("命令长度有错误。\n"); return 0; } if(is_Sourcepathright(argv[1])==0){ return 0; } if(is_Destpathright(argv[2])==0){ return 0; } if(is_InputKeyRight(argv[3])==0){ printf("输入的密钥不正确。\n"); return 0; } if(strlen(argv[4])>1){ printf("错误的加解密类型。\n"); return 0; } if(argv[4][0]!='e'&&argv[4][0]!='E'&&argv[4][0]!='d'&&argv[4][0]!='D'){ printf("错误的加解密类型。\n"); return 0; } return 1;}
void InitS(unsigned char *s){ int i; for(i=0;i<256;i++) s[i]=i;}
void InitT(unsigned char *t,char *inputkey){ int i; for(i=0;i<256;i++) { t[i]=inputkey[i%strlen(inputkey)]; }}
void Swap(unsigned char *s,int first,int last){ unsigned char temp; temp=s[first]; s[first]=s[last]; s[last]=temp;}
void InitPofS(unsigned char *s,unsigned char *t){ int i; int j=0; for(i=0;i<256;i++) { j=(j+s[i]+t[i])%256; Swap(s,i,j); }}
int Crypt(char *sourcepath,char *destpath,char *key){ unsigned char s[256]={0}; unsigned char t[256]={0}; int buf; FILE *fsource; FILE *fdest; int i=0; int j=0; int k=0; int temp;
InitS(s); InitT(t,key); InitPofS(s,t); fsource=fopen(sourcepath,"rb"); fdest=fopen(destpath,"wb"); buf=fgetc(fsource); while(buf!=EOF){ i=(i+1)%256; j=(j+s[i])%256; Swap(s,i,j); temp=(s[i]+s[j])%256; k=s[temp]; fputc(k^buf,fdest); buf=fgetc(fsource); } return 1;}
|
|
|