密码学之凯撒密码(C\C++)

C语言代码附上,C++的话应该在最前面加上个预编译头**#include “stdafx.h”**,否则会报错,详情参考:warning C4627: 在查找预编译头使用时跳过
凯撒密码功能:

限制部分非法字符及数字输入;
限制输入字母数量;

  • 加密:
    密码学之凯撒密码(C\C++)

  • 解密:
    输出所有明文
    密码学之凯撒密码(C\C++)

代码如下:

#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("请输入英文字母!");
}