Vigenère算法思路
给出一串明文先判断是否在26个英文字母,然后用明文加上去密钥的得出的数值就是向后移位的位数,用此可以得出密文。而与这种方法相反得出解密的明文。判断给出的字母是不是在26个大小英文字母内,需保证是在26个字母内,使得明文,密钥,密文均在26个字母内。
目的
1.掌握单表代替和多表代替的加密原理。
2.进一步巩固掌握各种古典密码算法的加解密。
3.分析古典密码算法的安全性。
4.编程能力的锤炼。
要求
1.熟练掌握古典密码机制与原理。
2.选择一种古典密码算法编写程序实现(文件或数据)加解密功能。
3.对算法安全性进行分析评估。
实验工具
Anolis-7(64)
实验步骤
编制程序代码
将代码复制进去(这里最好自己输入,加强记忆)
#include<stdio.h>
//加密
int encrypt(char *text,char *result,char *k)
{
int l,i,j=0,z=0;
for(l=0;text[l]!='\0';l++);
for(i=0;i<l;i++)
{
result[z]=(text[i]-'a'+k[j]-'a')%26+'a';
j++;
z++;
}
return 0;
}
//解密
int decrypt(char *text,char *result,char *k)
{
int l,i,j=0,z=0;
for(l=0;text[l]!='\0';l++);
for(i=0;i<l;i++)
{
result[z]=(text[i]-k[j]+26)%26+'a';
j++;
z++;
}
return 0;
}
int main()
{
char text[50]="";
char result[50]="";
char k[50]="";
int type;
/**欢迎**/
printf("--------欢迎使用Vigenere密码-----------\n");
printf("请填写明文或者密文\n");
scanf("%[^\n]",text);
printf("请选择加密方式,输入1加密,输入2解密\n");
scanf("%d",&type);
printf("请输入密钥k\n");
scanf("%s",k);
if(type == 1){
/**加密**/
encrypt(text,result,k);
printf("明文%s的密文为:%s\n",text,result);
}else if(type == 2){
/**解密**/
decrypt(text,result,k);
printf("密文%s的明文为:%s\n",text,result);
}
return 0;
}