密码学RC4算法 C语言实现
密码学RC4算法 C语言实现
加密程序
L为秘钥种子个数
#include
int main()
{int n,L;int k[10];int x=0;char c;char m[50];int msize=0;printf("请输入n和L:"); scanf("%d %d",&n,&L);printf("请输入秘钥种子:");do{scanf("%d%c",&k[x],&c);x=x+1;}while(c!='\n');printf("请输入明文:"); while((m[msize]=getchar())!='\n') {msize=msize+1;}if(msize>=50){printf("输入个数不小于50");return 0; }int j,y;int merjinzhi[250];for(j=0;j<msize;j++){y=(int)(m[j])-97;if(y<0||y>25){printf("输入了不合规明文");return 0; }if(y>=16){merjinzhi[j*5]=1;y=y-16;}else merjinzhi[j*5]=0;if(y>=8){merjinzhi[j*5+1]=1;y=y-8;}else merjinzhi[j*5+1]=0;if(y>=4){merjinzhi[j*5+2]=1;y=y-4;}else merjinzhi[j*5+2]=0;if(y>=2){merjinzhi[j*5+3]=1;y=y-2;}else merjinzhi[j*5+3]=0;if(y>=1){merjinzhi[j*5+4]=1;}else merjinzhi[j*5+4]=0;}int ssize=2,i;for(i=0;i<n-1;i++)ssize=2*ssize;int s[100],t[100];for(i=0;i<ssize;i++){s[i]=i;t[i]=k[i%L];}printf("第一步\n");for(i=0;i<ssize;i++)printf("%d",s[i]);printf("\n");for(i=0;i<ssize;i++)printf("%d",t[i]);printf("\n");int d;j=0;for(i=0;i<ssize;i++){j=(j+s[i]+t[i])%ssize;d=s[i];s[i]=s[j];s[j]=d;}i=0,j=0;int kerjinzhi[250];int kerjinzhigeshu=0;int p,z,g;printf("第二步\n");while(kerjinzhigeshu<msize*5){i=(i+1)%ssize;j=(j+s[i])%ssize;d=s[i];s[i]=s[j];s[j]=d;p=(s[i]+s[j])%ssize;z=s[p];printf("%d ",z);for(g=0;g<n;g++){if(z>=(ssize/((g+1)*2))){kerjinzhi[kerjinzhigeshu+g]=1;z=z-ssize/((g+1)*2);}else kerjinzhi[kerjinzhigeshu+g]=0;}kerjinzhigeshu=kerjinzhigeshu+n;}printf("\n");int cerjinzhi[250];for(i=0;i<msize*5;i++){if(1==(merjinzhi[i]+kerjinzhi[i])) cerjinzhi[i]=1;else cerjinzhi[i]=0;}for(i=0;i<msize;i++){printf("%c",(char)(cerjinzhi[i*5]*16+cerjinzhi[i*5+1]*8+cerjinzhi[i*5+2]*4+cerjinzhi[i*5+3]*2+cerjinzhi[i*5+4]+97));}return 0;
}
解密程序
#include
int main()
{int n,L;int k[10];int x=0;char c;char m[50];int csize=0;printf("请输入n和L:"); scanf("%d %d",&n,&L);printf("请输入秘钥种子:");do{scanf("%d%c",&k[x],&c);x=x+1;}while(c!='\n');printf("请输入密文:"); while((m[csize]=getchar())!='\n') {csize=csize+1;}if(csize>=50){printf("输入个数不小于50");return 0; }int j,y;int cerjinzhi[250];for(j=0;j<csize;j++){y=(int)(m[j])-97;if(y<0||y>25){printf("输入了不合规密文");return 0; }if(y>=16){cerjinzhi[j*5]=1;y=y-16;}else cerjinzhi[j*5]=0;if(y>=8){cerjinzhi[j*5+1]=1;y=y-8;}else cerjinzhi[j*5+1]=0;if(y>=4){cerjinzhi[j*5+2]=1;y=y-4;}else cerjinzhi[j*5+2]=0;if(y>=2){cerjinzhi[j*5+3]=1;y=y-2;}else cerjinzhi[j*5+3]=0;if(y>=1){cerjinzhi[j*5+4]=1;}else cerjinzhi[j*5+4]=0;}int ssize=2,i;for(i=0;i<n-1;i++)ssize=2*ssize;int s[100],t[100];for(i=0;i<ssize;i++){s[i]=i;t[i]=k[i%L];}printf("第一步\n");for(i=0;i<ssize;i++)printf("%d",s[i]);printf("\n");for(i=0;i<ssize;i++)printf("%d",t[i]);printf("\n");int d;j=0;for(i=0;i<ssize;i++){j=(j+s[i]+t[i])%ssize;d=s[i];s[i]=s[j];s[j]=d;}i=0,j=0;int kerjinzhi[250];int kerjinzhigeshu=0;int p,z,g;printf("第二步\n");while(kerjinzhigeshu<csize*5){i=(i+1)%ssize;j=(j+s[i])%ssize;d=s[i];s[i]=s[j];s[j]=d;p=(s[i]+s[j])%ssize;z=s[p];printf("%d ",z);for(g=0;g<n;g++){if(z>=(ssize/((g+1)*2))){kerjinzhi[kerjinzhigeshu+g]=1;z=z-ssize/((g+1)*2);}else kerjinzhi[kerjinzhigeshu+g]=0;}kerjinzhigeshu=kerjinzhigeshu+n;}printf("\n");int merjinzhi[250];for(i=0;i<csize*5;i++){if(1==cerjinzhi[i]) merjinzhi[i]=1-kerjinzhi[i];else if(kerjinzhi[i]==1)merjinzhi[i]=1;else merjinzhi[i]=0;}for(i=0;i<csize;i++){printf("%c",(char)(merjinzhi[i*5]*16+merjinzhi[i*5+1]*8+merjinzhi[i*5+2]*4+merjinzhi[i*5+3]*2+merjinzhi[i*5+4]+97));}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
