RC4算法 N=3(C语言)
侠客行
#include<stdio.h>
#include<string.h>int m1[200]; // 明文 二进制
int s[8]={0,1,2,3,4,5,6,7};
int k3[200]; // 密钥二进制
char c[200]; // 密文
int count;int main(void)
{
int i,j,n;
char m0[100];int T[8];
printf("输入密钥长度:n");
scanf("%d",&n);
printf("初始密钥:n");
for(i=0;i<n;i++)
scanf("%d",&T);
getchar();
if(n<8)
{
for(i=0;i<8;i++)
T=T[i%n];
printf("初始T盒:n");
for(i=0;i<8;i++)
printf("%d",T);
printf("n");}
else
{
printf("输入错误,退出程序n");
exit(1);
}
void mingwenchuli(char m0[100]);// 明文处理
mingwenchuli(m0);
void miyao(int T[8]);// 密钥生成
miyao(T);
void jiami(int m1[200],int k3[200]); // 加密
jiami(m1,k3);
}void mingwenchuli(char m0[100]) // 明文处理
{
int i,j,r,n,temp;
int m[200];
printf("请输入明文字符:n");
i=0;
while((m0=getchar())!=n)
i++;
m0=;
j=0;
count=0;
int z=strlen(m0);
int y[200];
for(i=0;i<z;i++)
{
r=0;
int k=0;
y=int(m0);
do{
m[r]=y%2; // 转换 为 二进制
y=y/2;
m1[count]=m[r];
r++;
count++;
}while(r!=7);
for(j=count-1;j>=count-3;j--)
{
temp=m1[j];
m1[j]=m1[j-6+k];
m1[j-6+k]=temp;
k=k+2;
}
}m1[count]=;
printf("输出明文二进制形式:n");
for(r=0;r <count; r++)
printf("%d",m1[r]);
printf("n");
}
void miyao(int T[8])
{
int j,p;
int i,temp,t,l;
int k[100];
int k2[200];
j=0;
for(i=0;i<8;i++) // 密钥调度
{
j=(j+s+T)%8;
temp=s;
s=s[j];
s[j]=temp;
}
printf("输出s盒数组:n");
for(i=0;i<8;i++)
printf("%d",s); // 输出 S 数组
printf("n");i=0;
j=0;
for(t=0;t<(count/3+1);t++)// 伪随机调度算法
{
i=(i+1)%8;
j=(j+s)%8;
temp=s;
s=s[j];
s[j]=temp;
l=(s+s[j])%8;
k[t]=s[l];
}
printf("输出密钥十进制形式:n");
for(t=0;t<(count/3+1);t++)
printf("%d",k[t]); // 输出 密钥 -----十进制
printf("n");
p=0;
for(i=0;i<(count/3+1);i++)
{
j=0;
do{
k2[j]=k%2; // 二进制转换
k=k/2;
k3[p]=k2[j];
p++;
j++;
}while(j!=3);temp=k3[p-1];
k3[p-1]=k3[p-3];
k3[p-3]=temp;
}
k3[p]=;printf("输出密钥二进制形式:n");
for(j=0;j<p;j++)
printf("%d",k3[j]);
printf("n");
}
void jiami(int m1[200],int k3[200])
{
int i,j;
for(i=0;i<count;i++) //异或加密
c=m1^k3;
printf("输出加密密文:n");
for(i=0;i<count;i++)
printf("%d",c);
printf("n");
}
补充:软件开发 , C语言 ,