密码学RC4算法 C语言实现
加密程序
L为秘钥种子长度
#include <stdio.h>
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;
}