维吉尼亚密码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小时内删除。