CR4加密算法的C语言实现
网工152 高翔 15115325
结果:
代码以及注释:
#include<stdio.h>
#include<string.h>
void swap(unsigned char &a,unsigned char &b)
{
unsigned char t;
t=a;
a=b;
b=t;
}
int main()
{
unsigned char S[256];//状态向量
unsigned char T[256];//秘钥
//将 S排序
for(int i=0;i<256;i++)
{
S[i]=i;
}
//输入秘钥K abcdefghijklmn
printf("请输入秘钥:");
int num=0;
unsigned char K[256];
unsigned char ch;
//输入秘钥
while((ch=getchar())!='\n')
{
K[num++]=ch;
}
//将K赋值给T
for(int j=0,l=0;j<256;j++)
{
T[j]=K[l];
l=(l+1)%num;
}
int j=0;
//S的初始置换
for(int i=0;i<256;i++)
{
j=(j+S[i]+T[i])%256;
swap(S[i],S[j]);
}
//明文在此
char mingwen[256]="this is test";
printf("输入明文或者密文:");
scanf("%s",mingwen);
char miwen[256]={0};
int cnt=0;
unsigned char mi;
int i=0,t=0;
j=0;
unsigned char k;//单字节密钥流
//产生密钥流并且加密或者解密
while(true)
{
i=(i+1)%256;
j=(j+S[i])%256;
swap(S[i],S[j]);
t=(S[i],S[j])%256;
k=S[t];
mi=k^mingwen[cnt++];
miwen[cnt-1]=mi;
if(cnt==strlen(mingwen))
{
printf("\n");
break;
}
}
printf("对应的明文或者密文::%s\n",miwen);
FILE *fp;
fp=fopen("test.txt","w+");
fprintf(fp,"%s",miwen);
return 0;
}