密码学之凯撒密码(C\C++)
C语言代码附上,C++的话应该在最前面加上个预编译头**#include “stdafx.h”**,否则会报错,详情参考:warning C4627: 在查找预编译头使用时跳过
凯撒密码功能:
限制部分非法字符及数字输入;
限制输入字母数量;
-
加密:
-
解密:
输出所有明文
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main (){
char small_letter[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char big_letter[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char text[1000],result[1000];
char c;
int i,count=0,k,p;
int function;
printf("凯撒密码加解密:\nInput text:");
c=getchar();
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
while(1)
{
if(c == '\n') break;
text[count]=c;
printf("%c",text[count]);
count++;
c=getchar();
}
printf("\n");
printf(" 1:Encipher\n 2:Decipher\nInput 1or2:");
scanf("%d",&function);
if (function == 1)
{
printf("Input the Key:" );
scanf("%d",&k);
if (k>0&&k<=26)
{
for(i=0;i<count;i++)
{
if(text[i]>='A'&&text[i]<='Z')
{
result[i]=big_letter[((text[i]-'A')+k)%26];
}
else if (text[i]>='a'&&text[i]<='z')
{
result[i]=small_letter[((text[i]-'a')+k)%26];
}
else result[i]=text[i];
printf("%c",result[i]);
}
}
else printf("Please Input 1~26!");
}
else if (function == 2){
for (k=1;k<=26;k++)
{printf("k=%d,",k);
for(i=0;i<count;i++){
if(text[i]>='A'&&text[i]<='Z')
{
p=((text[i]-'A')-k);
while(p<0)p+=26;
result[i]=big_letter[p];
}
else if (text[i]>='a'&&text[i]<='z')
{
p=((text[i]-'a')-k);
while(p<0)p+=26;
result[i]=small_letter[p];
}
else result[i]=text[i];
printf("%c",result[i]);
}
printf("\n");
}
}
else printf("Formal Error!");
return 0;
}
else printf("请输入英文字母!");
}