维吉尼亚密码c语言源代码
#include<stdio.h> // 头文件 <stdio.h> , 声明标准输入输出函数
#include<string.h> // 头文件 <string.h> ,声明字符串操作函数
char vigenere_table[26][26]; //定义维吉尼亚表
void set_vigenere_table()
{
int i,j;
int key; //行 指针
for (i = 0; i < 26; i++)
{
key=i;
for(j=0;j<26;j++)
{
vigenere_table[i][j]='A'+(key%26);
key++;
}
}
printf("初始化维吉尼亚表完毕:\n\n");
}
void vigenere_encrypt(char* source,char* des) //定义加密函数
{
int source_len=strlen(source);
int key_len=strlen(des);
int i;
for(i=0;i<source_len;i++) //对每个字母进行加密
{
int source_index= source[i]-'A'; //密文指针
int key_index=des[i%key_len]-'A'; //维吉尼亚表指针
int des_index=vigenere_table[key_index][source_index]-'A';
des[i]=des_index+'A';
}
des[source_len]='\0';
}
void vigenere_decrypt(char* source,char* des) //定义解密函数
{
#define MAX_LEN 26
int source_len=strlen(source);
int key_len=strlen(des);
int i;
for(i=0;i<source_len;i++) //对每个字母进行解密
{
int key_index=des[i%key_len]-'A'; //维吉尼亚表指针
int j;
for(j=0;j<MAX_LEN;j++) //从维吉尼亚表中查密文指针
{
if(vigenere_table[key_index][j]==source[i])
{
break;
}
}
des[i]=j+'A';
}
des[source_len]='\0';
}
int main()
字符串函数的头文件{
char plain[]="VIGENERECIPHER";
char key[]="ABCD";
char result[20];
char result1[20];
set_vigenere_table();
vigenere_encrypt(plain,result);
printf("明文 : %s\n密钥 : %s\n密文 : %s\n",plain,key,result);
vigenere_decrypt(result,result1);
printf("解密后 : %s\n",result1);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论