通过编程实现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; }
为了方便,加密解密放到一块了。
运行效果: