TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:谨配明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下握拿:
密钥:RE LA TI ONS RE LA TION SR ELA TIONSREL
明文:TO BE OR NOT TO BE THAT IS THE QUESTION
密文:KS ME HZ BBL KS ME MPOG AJ XSE JCSFLZSY
与凯撒密码类似,进行一下运算两次即可
#include <stdlib.h>#include <stdio.h>
#include <string.h>
#define N 10000
void function(char message[],char key[],int mode) //加解密函数
int main()
{
int choose
char m[N],key[N]
printf("维吉尼亚加密,请输入1;解密,请输入2:\n")
scanf("%d",&choose)
getchar()
if (choose == 1 || choose == 2)
{
if (choose == 1)
printf("输入明文:\n")
if (choose == 2)
printf("输入密文:\n")
gets(m)
printf("输亮闷入密钥:\n")
gets(key)
function(m,key,choose)
}
else
printf("输入错误!\n")
return 0
}
void function(char message[],char key[],int mode) //加解密函数
{
int i, j = 0 //j控制key的轮回
int len_k = strlen(key) //密钥长度
char s[N]
for(i=0message[i]!='\0'i++)
{
if(message[i] == 32)//判断空格
s[i]=' '
else
{
if (mode == 1)
s[i]=(int(message[i]-'a')+int(key[j%len_k]-'a'))%26+97
if (mode == 2)
s[i]=(int(message[i]-'a')-int(key[j%len_k]-'a')+26)%26+97
j++
}
printf("%c",s[i])
}
printf("\n")
}
gets(l)//不加这句M就输入不了为什么?
是因为没有这句的话,喊键谈按的回车键就输成m了。
连用两个输入语句时,需要考虑回郑碰车键,就像我代码里的getchar()。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)