凯撒密码加密解密C语言详细代码

凯撒密码

又叫循环移位密码.它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数.
例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的
密文为L:
E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

解题思路

把一条消息中的每个字母用字母表中固定距离之后的那个字母代替。(如果超越了字母Z,会绕道字母表的起始位置。例如,如果每个字母都用字母表中两个位置之后的字母代替,那么Y就会被替换为A,Z就会被替换为B。),然后编写程序。

#include <stdio.h>
#include <string.h>

int main()
{
    char passwd[100],encrypted[100];
    int i,j,k,t,move,tmp;
    printf("加密选择1,解密选择2:");
    scanf("%d",&tmp);
    if(tmp==1){
    	printf("输入原文:");
	    scanf("%s",&passwd);
	    printf("自定义密匙(1-25):");
	    scanf("%d",&move);
	    for(i=0; i<strlen(passwd); i++)
	    {
	        if(passwd[i] >= 'A' && passwd[i] <= 'Z')
	        {
	            passwd[i] = ((passwd[i]-'A')+move)%26+'A';
	        }
	        else if(passwd[i] >= 'a' && passwd[i] <= 'z')
	        {
	            passwd[i] = ((passwd[i]-'a')+move)%26+'a';
	        }
	    }
	    printf("加密后的密文");
	    printf("%s\n",passwd);
	}
    else{
    	printf("输入密文:");
	    scanf("%s",&passwd);
	    printf("密匙为(1-25):");
	    scanf("%d",&move);
	    for(i=0; i<strlen(passwd); i++)
	    {
	        if(passwd[i] >= 'A' && passwd[i] <= 'Z')
	        {
	            passwd[i] = ((passwd[i]-'A')+26-move)%26+'A';
	        }
	        else if(passwd[i] >= 'a' && passwd[i] <= 'z')
	        {
	                passwd[i] = ((passwd[i]-'a')+26-move)%26+'a';
	        }
	    }
	    printf("解密后的原文");
	    printf("%s\n",passwd);
	}
    return 0;
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐