⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vigenere.txt

📁 网络信息安全 密码学中vigenere的实现
💻 TXT
字号:
/**********************************
title: Vegenere 加密解密算法

author:

date: 2009-2-25
************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1000

char private_key[MAX];    /* 存放密钥 */
char open_text[MAX*MAX];    /* 存放输出的明文 */
char chiper_text[MAX*MAX];   /* 存放加密后的密文文件 */
char put_text_place[MAX];       /* 需要加密的文件的地址 */
char output_text_place[MAX]={"chipertext.txt"};     /* 加密后的密文 文件输出地址,默认当前目录,文件名为 */

int key_lenth;                 /* 密钥长度 */



void vigenere()
{
    int i,j,k;
    int open_lenth;
    int counter;
    char output;
    char temp;      /* */
    
    //open_lenth = strlen(open_text);
    counter = 0;  /* 字符计数器 */
    /** input */
    
    while(scanf("%c",&temp) != EOF)    /*  逐个输入字符,到文件结束 */
    {
        if (temp >= 'a' && temp <= 'z')
        {
            k = counter % key_lenth;
            i = (int)(private_key[k] - 'a');
            if( temp + i > 122)  output =  temp - (26 - i);
            else output = temp + i;

            printf("%c",output);
        }
        else if(temp >= 'A' && temp <= 'Z')
        {
            k = counter % key_lenth;
            i = (int)(private_key[k]-'A');
            if( temp + i > 90) output = temp - (26 - i);
            else output = temp + i;
            
            printf("%c",output);
        }
        else printf("%c",temp);

        /* 计数器 自加*/
        counter ++;
    }
    printf("\n");
}

/* */
void decipher_vigenere()
{
    int i,j,k;
    char temp;
    char output;
    int counter = 0;
    
    while(scanf("%c",&temp) != EOF)
    {
        if (temp >= 'a' && temp <= 'z')
        {
            k = counter % key_lenth;
            i = private_key[k] - 'a';  /* 计算偏移量 */
            if(temp - i < 97) output = temp +(26 - i);
            else output = temp - i;
            printf("%c",output);
        }
        else if(temp >= 'A' && temp <= 'Z')
        {
            k = counter % key_lenth;
            i = private_key[k] - 'a';
            if(temp - i < 65) output = temp +(26 - i);
            else output = temp - i;

            printf("%c",output);
        }
        else printf("%c",temp);
        
        counter ++;
    }
}

int main()
{
    int i,j,k;
    
    printf("请输入密钥:");
    /* 从键盘输入密钥 */
    scanf("%s",private_key);  /* 输入密钥 ,应该可以随机产生 */
    
    //printf("请输入加密文件的地址:");
    /* 从键盘输入加密文件地址 */
    //scanf("%s",put_text_place);
    
   // printf("请输入密文输出地址,直接回车问默认输出:");
    /* 从键盘输入密文输出地址 */
    //scanf("%s",output_text_place);
    /* 判断输出地址是否为空,如果为空,取得默认地址和文件名 */
    if( strlen(output_text_place) == 0 )
        strcpy(output_text_place,"chipertext.txt");
    
    printf("进行加密请输入 1 ,进行解密请输入 2:");
    scanf("%d",&j);
    getchar();

    //freopen(put_text_place,"r",stdin); /*从系统中某个位置读入文件*/
    freopen("mmt.txt","r",stdin);/*测试*/
    freopen(output_text_place,"w",stdout); /* 把密文写入指定文件 */
    
    ///* input */
    //gets(open_text);
    
    key_lenth = strlen(private_key); /**/
    

    /* 调用 vegenere 算法 进行加密 */
    if(j == 1)vigenere();
    else if(j == 2)decipher_vigenere();
    else return 0;
    

    /* output */
    //puts(chiper_text);

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -