通过编程实现vigenere加密,更加深入的了解其原理,掌握vigenere算法。
vigenere cipher加密规则:
1)找到一个关键字作为密钥;
2)将关键字重复的写在明文上;
3)根据vigenere table 找出对应的密文
#include <stdio.h>
#include <string.h>
int main()
{
char first;
char row[26][26];
for(int i=0;i<26;i++) //构造vigenere表
{
first=(char)((int)'a'+i);
for(int j=0;j<26;j++)
{
if((int)first+j>'z')
row[i][j]=(char)((int)first+j-26);
else
row[i][j]=(char)((int)first+j);
printf("%c ",row[i][j]);
}
printf("\n");
}
char key[3]={'d','a','i'}; //构建密钥为dai
printf("密钥是 dai\n");
char plantext[100];
char cipher[100];
int i1,j1,k;
printf("输入明文:\n");
scanf("%s",plantext);
k=strlen(plantext); //明文长度为k
printf("\n");
printf("加密为:\n");
for(i=0;i<k;i++) //加密
{
i1=(int)plantext[i]-'a';
j1=(int)key[i%2]-'a';
printf("%c",row[i1][j1]);
cipher[i]=row[i1][j1];
}
printf("\n");
printf("解密为:\n");
for(i=0;i<k;i++) //解密
{
i1=(int)key[i%2];
j1=(int)cipher[i]-i1;
printf("%c",row[0][j1]);
}
printf("\n");
return 0;
}
运行效果: