本站首页    管理页面    写新日志    退出


«February 2026»
1234567
891011121314
15161718192021
22232425262728


公告

 


我的分类(专题)

日志更新

最新评论

留言板

链接


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;}  


阅读全文(4924) | 回复(-1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.445 second(s), page refreshed 144833632 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号