#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void table(char *keyword) /*筛选密钥(去重复去空格)*/
{
inti,j,k;
for(i=0;*(keyword+i)!='\0';i++)
{
for(j=i;*(keyword+j)!='\0';j++)
{
if(i!=j)
if(*(keyword+i)==*(keyword+j)||*(keyword+j)=='')
{
for(k=j;*(keyword+k)!='\0';k++)
*(keyword+k)=*(keyword+k+1);
j--;
}
}
}
}
void newTab(char *keyword) /*生成密钥表*/
{
charch;
inti;
intt;
for(t=0;*(keyword+t)!='\0';t++);
for(ch='a';ch<='z';ch++)
{
for(i=0;*(keyword+i)!=ch;i++)
{
if(*(keyword+i)=='\0')
{
*(keyword+t)=ch;
t++;
break;
}
}
}
*(keyword+t)='\0';
}
char *Ciphertext(char *keyword,char*Plaintext) /*按密码表加密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;ch<='z';ch++,j++)
{
if(*(Plaintext+i)==ch)
{
*(Plaintext+i)=*(keyword+j);
break;
}
}
}
returnPlaintext;
}
char *Decrypt(char *keyword,char*Plaintext) /*解密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
{
if(*(Plaintext+i)==*(keyword+j))
{
*(Plaintext+i)=ch;
break;
}
}
}
returnPlaintext;
}
void main()
{
char*keyword,*Plaintext,*tmp=NULL;
keyword=(char*)malloc(sizeof(char));
Plaintext=(char*)malloc(sizeof(char));
printf("Inputkey word:"); /*输入欲用密钥*/
gets(keyword);
printf("InputPlaintext:"); /*输入要转换的明文*/
gets(Plaintext);
table(keyword); /*去空格去重复*/
newTab(keyword);/*生成密码表*/
tmp=Ciphertext(keyword,Plaintext);/*对应着密码表生成密文*/
puts(tmp);/*输出密文*/
puts(Decrypt(keyword,tmp));/*解密输出*/
}
#include <stdlib.h>
#include <string.h>
void table(char *keyword) /*筛选密钥(去重复去空格)*/
{
inti,j,k;
for(i=0;*(keyword+i)!='\0';i++)
{
for(j=i;*(keyword+j)!='\0';j++)
{
if(i!=j)
if(*(keyword+i)==*(keyword+j)||*(keyword+j)=='')
{
for(k=j;*(keyword+k)!='\0';k++)
*(keyword+k)=*(keyword+k+1);
j--;
}
}
}
}
void newTab(char *keyword) /*生成密钥表*/
{
charch;
inti;
intt;
for(t=0;*(keyword+t)!='\0';t++);
for(ch='a';ch<='z';ch++)
{
for(i=0;*(keyword+i)!=ch;i++)
{
if(*(keyword+i)=='\0')
{
*(keyword+t)=ch;
t++;
break;
}
}
}
*(keyword+t)='\0';
}
char *Ciphertext(char *keyword,char*Plaintext) /*按密码表加密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;ch<='z';ch++,j++)
{
if(*(Plaintext+i)==ch)
{
*(Plaintext+i)=*(keyword+j);
break;
}
}
}
returnPlaintext;
}
char *Decrypt(char *keyword,char*Plaintext) /*解密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
{
if(*(Plaintext+i)==*(keyword+j))
{
*(Plaintext+i)=ch;
break;
}
}
}
returnPlaintext;
}
void main()
{
char*keyword,*Plaintext,*tmp=NULL;
keyword=(char*)malloc(sizeof(char));
Plaintext=(char*)malloc(sizeof(char));
printf("Inputkey word:"); /*输入欲用密钥*/
gets(keyword);
printf("InputPlaintext:"); /*输入要转换的明文*/
gets(Plaintext);
table(keyword); /*去空格去重复*/
newTab(keyword);/*生成密码表*/
tmp=Ciphertext(keyword,Plaintext);/*对应着密码表生成密文*/
puts(tmp);/*输出密文*/
puts(Decrypt(keyword,tmp));/*解密输出*/
}