📄 weonigema.c
字号:
#define NUM 100
#define NUMKEY 100
main()
{ char key1[NUMKEY]; /*中间变量,用于存放临时信息*/
char key[NUMKEY]; /*用于存放密钥信息*/
char code[NUM]; /*用于存放明文信息*/
char encode[NUM]; /*用于存放密文信息*/
int i,numb,numbkey,temp1,temp2;
printf("Please input the figure of key:(<=%d)\n",NUMKEY-1); /*数组首元素key1[0]由回车占据,并非用户所输入的字符*/
scanf("%d",&numbkey);
printf("Please input the key(=%d)\n",numbkey); /*数组首元素key1[0]由回车占据,并非用户所输入的字符,若要实现numbkey个明文密文对就需要i<=numbkey*/
for(i=0;i<=numbkey;i++) /*由用户输入输入密钥*/
scanf("%c",&key1[i]);
for(i=0;i<numbkey;i++) /*重新存储便于使用*/
key[i]=key1[i+1];
printf("Please input the figure of numbes:(<=%d)\n",NUM-1); /*数组首元素code[0]由回车占据,并非用户所输入的字符*/
scanf("%d",&numb);
printf("Please input codes:(the figure=%d)\n",numb);
for(i=0;i<=numb;i++) /*数组首元素code[0]由回车占据,并非用户所输入的字符,若要实现numb个明文密文对就需要i<=numb*/
{ scanf("%c",&code[i]); /*用户输入字符,其实code[0]为回车字符,从code[1]开始才是用户输入的字符,所以用户输入的字符只有NUM-1个*/
temp1=key[(i-1)%numbkey]-96; /*定位密钥字符在字母表中的位置*/
temp2=(code[i]-96+temp1-1)%26; /*根据维吉尼亚码的生成算法定位密文字母在字母表中的位置*/
if(temp2==0)
encode[i]=96+26; /*将密文转化为ASCII码,若取余为0,则密文相对位置为26,要特别处理*/
else
encode[i]=96+temp2; /*将密文转化为ASCII码,若取余<26,则ASCII码为96+在字母表中的相对位置*/
}
printf("the encrypted numbes:\n");
for(i=1;i<=numb;i++)
printf("%c",encode[i]); /*将转化后的密文输出 */
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -