古典密码学替换置换加密C程序.docx
《古典密码学替换置换加密C程序.docx》由会员分享,可在线阅读,更多相关《古典密码学替换置换加密C程序.docx(14页珍藏版)》请在冰豆网上搜索。
![古典密码学替换置换加密C程序.docx](https://file1.bdocx.com/fileroot1/2022-10/29/f8f537d9-1b36-4cf6-a514-90ea5381168c/f8f537d9-1b36-4cf6-a514-90ea5381168c1.gif)
古典密码学替换置换加密C程序
替换:
#include
intencrypt()
{
charSTR[27]={'X','N','Y','A','H','P','O','G','Z','Q','W','B','T','S','F','L','R','C','V','M','U','E','K','J','D','I'};
charstr[27]={'d','l','r','y','v','o','h','e','z','x','w','p','t','b','g','f','j','q','n','m','u','s','k','a','c','i'};
intx,i=0;
charcode[80],string[80];
printf("请输入你的明文(80字符内的小写字符串):
");
scanf("%s",string);
printf("Thecodeis:
");
for(i=0;string[i];i++)
{
x=string[i]-97;
code[i]=STR[x];
printf("%c",STR[x]);
}
printf("\n");
return0;
}
intdecrypt()
{
charSTR[27]={'X','N','Y','A','H','P','O','G','Z','Q','W','B','T','S','F','L','R','C','V','M','U','E','K','J','D','I'};
charstr[27]={'d','l','r','y','v','o','h','e','z','x','w','p','t','b','g','f','j','q','n','m','u','s','k','a','c','i'};
intx,i=0;
chardecode[80],STRING[80];
printf("请输入你的密文(80字符内的大写字符串):
");
scanf("%s",STRING);
printf("Thedecodeis:
");
for(i=0;STRING[i];i++)
{
x=STRING[i]-65;
decode[i]=str[x];
printf("%c",str[x]);
}
printf("\n");
return0;
}
intmain()
{
charSTR[27]={'X','N','Y','A','H','P','O','G','Z','Q','W','B','T','S','F','L','R','C','V','M','U','E','K','J','D','I'};
charstr[27]={'d','l','r','y','v','o','h','e','z','x','w','p','t','b','g','f','j','q','n','m','u','s','k','a','c','i'};
intt,x,y=0,i=0;
charcode[80],string[80];
chardecode[80],STRING[80];
printf("加密请输入1,解密请输入0:
");
scanf("%d",&t);
printf("\n");
if(t==1)
{
encrypt();
for(i=0;code[i];i++)
{
x=code[i]-65;
decode[i]=str[x];
if(decode[i]==string[i])
y++;
elsey=y;
}
if(y==i-1)
printf("CRYPT_OK!
\n");
elseprintf("CRYPT_ERROR!
\n");
}
elseif(t==0)
{
decrypt();
for(i=0;decode[i];i++)
{
x=decode[i]-65;
code[i]=STR[x];
if(code[i]==STRING[i])
y++;
elsey=y;
}
if(y==i-125)
printf("CRYPT_OK!
\n");
elseprintf("CRYPT_ERROR!
\n");
}
else
printf("ERROR!
\n");
return0;
}
置换:
#include
#include
#include
char*encrypt(char*str,intn)
{
inti,j,k,l,d;
char*c,*s1,*c1;
l=strlen(str);
if((d=l%n)!
=0)l=l+n-d;
if((s1=(char*)malloc(l*sizeof(char)+1))==NULL)
{
printf("Memoryerror!
\n");
exit(l);
}
if((c=(char*)malloc(l*sizeof(char)+1))==NULL)
{
printf("Memoryerror!
\n");
exit(l);
}
c1=c;
strcpy(s1,str);
for(i=strlen(str);is1[i]=32;
s1[l]='\0';
for(k=0;k{
for(j=0;j{
*c1=s1[k+j*n];
c1++;
}
}
*c1='\0';
free(s1);
returnc;
}
char*decrypt(char*str,intn)
{
inti,j,k,l,d;
char*c,*s1,*c1;
l=strlen(str);
if((d=l%n)!
=0)l=l+n-d;
n=l/n;
if((s1=(char*)malloc(l*sizeof(char)+1))==NULL)
{
printf("Memoryerror!
\n");
exit(l);
}
if((c=(char*)malloc(l*sizeof(char)+1))==NULL)
{
printf("Memoryerror!
\n");
getch();
exit(l);
}
c1=c;
strcpy(s1,str);
for(i=strlen(str);is1[i]=32;
s1[l]='\0';
for(k=0;k{
for(j=0;j{
*c1=s1[k+j*n];
c1++;
}
}
while(*(--c1)==32);
c1++;
*c1='\0';
free(s1);
returnc;
}
intmain()
{
intn,t,i=0,y=0;
charstr[80];
char*c,*s;
printf("加密请输入1,解密请输入0:
");
scanf("%d",&t);
if(t==1)
{
printf("请输入明文:
");
scanf("%s",str);
printf("请输入密钥:
n=");
scanf("%d",&n);
c=encrypt(str,n);
printf("加密后的密文c=%s$\n",c);
s=decrypt(c,n);
for(i=0;str[i];i++)
{
if(str[i]==s[i])
y++;
elsey=y;
}
//printf("%d%d",i,y);
if(y==i)
printf("CRYPT_OK!
\n");
elseprintf("CRYPT_ERROR!
\n");
}
elseif(t==0)
{
printf("请输入密文:
");
scanf("%s",str);
printf("请输入密钥:
n=");
scanf("%d",&n);
c=decrypt(str,n);
printf("解密后的明文c=%s$\n",c);
s=encrypt(c,n);
for(i=0;str[i];i++)
{
if(str[i]==s[i])
y++;
elsey=y;
}
if(y==i)
printf("CRYPT_OK!
\n");
elseprintf("CRYPT_ERROR!
\n");
}
elseprintf("ERROR!
");
return0;
}