C语言:凯撒密码的实现

凯撒密码的实现(10分)
题目内容:

凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。

他的原理很简单,说到底就是字母与字母之间的替换。每一个字母按字母表顺序向后移3位,如a加密后变成d,b加密后变成e,……x加密后变成a,y加密后变成b,z加密后变成c。

例如:“baidu”用凯撒密码法加密后字符串变为“edlgx”。

试写一个算法,将键盘输入的文本字符串(只包含a~z的字符)进行加密后输出。

输入格式:

字符串 后面跟一个字母”;“

注意这里用英文分号”;“作为输入的结束符号

输出格式:

字符串

输入样例:

baidu;

输出样例:

edlgx

编码:

#include <stdio.h>
#include <string.h>
int main()
{
    char passwd[100],encrypted[100];
    int i,j,k,t,move=3;
    scanf("%s;",&passwd);
    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]==';')
        {
        	passwd[i]='\0';
		}
    }
    printf("%s",passwd);
    return 0;
}  

 延伸:

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

int main()
{
    char passwd[100],encrypted[100];
    int i,j,k,t,move;
    while(1)
    {
        printf("Enter message to be encrypted:");
        gets(passwd);
        printf("Enter shift amount(1-25):");
        scanf("%d%*c",&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("%s",passwd);
        printf("\n");
    }
    return 0;
}

  

 

 

转载于:https://www.cnblogs.com/songqingbo/p/8934065.html

  • 20
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
素数凯撒密码是一种基于素数的加密算法,可以将明文转化为密文,保证信息的安全性。具体实现步骤如下: 1. 输入明文字符串和一个素数p(例如p=7); 2. 对于字符串中的每个字符,将其转化为ASCII码,然后加上p,再对256取模,得到密文字符的ASCII码; 3. 将得到的密文字符的ASCII码转化为字符,并将其连接起来,形成密文字符串。 解密的步骤与加密的步骤相反,具体实现如下: 1. 输入密文字符串和素数p; 2. 对于字符串中的每个字符,将其转化为ASCII码,然后减去p,再对256取模,得到明文字符的ASCII码; 3. 将得到的明文字符的ASCII码转化为字符,并将其连接起来,形成明文字符串。 以下是用C语言实现的素数凯撒密码代码: ```c #include <stdio.h> #include <string.h> int is_prime(int n) // 判断是否为素数 { if (n <= 1) return 0; for (int i = 2; i * i <= n; i++) { if (n % i == 0) return 0; } return 1; } void encrypt(char *s, int p) // 加密函数 { int len = strlen(s); for (int i = 0; i < len; i++) { s[i] = (s[i] + p) % 256; } } void decrypt(char *s, int p) // 解密函数 { int len = strlen(s); for (int i = 0; i < len; i++) { s[i] = (s[i] - p + 256) % 256; } } int main() { char str[100]; int p; printf("请输入明文字符串:"); scanf("%s", str); printf("请输入一个素数p:"); scanf("%d", &p); while (!is_prime(p)) { printf("输入的数不是素数,请重新输入:"); scanf("%d", &p); } encrypt(str, p); printf("加密后的密文为:%s\n", str); decrypt(str, p); printf("解密后的明文为:%s\n", str); return 0; } ``` 注意:以上代码中未进行错误处理,请自行添加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值