📄 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 + -