凯撒密码加解密

凯撒密码原理:

凯撒(Caesar)密码,又叫循环移位密码。它的加密方法就是将明文中的每个字母用字母表中该字母后的第M个字母来进行替换,从而进行加密。

加密:
E(x) = (x + a) mod 26
其中,E表示加密函数,x表示为明文;a为密钥(或者说是偏移位数,个人认为。
解密:
D(y) = (y - a) mod 26
其中,D表示解密函数,y为密文,a为密钥。
加密部分的代码:

void Encrypt(char *arr,int a) {
    int i = 0;
        for (i = 0; i < strlen(arr); i++) {
            if (arr[i] >= 'A' && arr[i] <= 'Z') {
                arr[i] = ((arr[i] - 'A') + a) % 26 + 'A';
            }
            else if(arr[i] >= 'a' && arr[i] <= 'z') {
                arr[i] = ((arr[i] - 'a') + a) % 26 + 'a';
            }
        }
        printf("加密后的密文为:\n");
        printf("%s",arr);
        printf("\n");
}

解密部分代码:

void Decry(char *arr, int a) {
    int i = 0;
    for (i = 0; i < strlen(arr); i++) {
        if (arr[i] >= 'A' && arr[i] <= 'Z') {
            arr[i] = ((arr[i] - 'A') - a) % 26 + 'A';
        }
        else if (arr[i] >= 'a' && arr[i] <= 'z') {
            arr[i] = ((arr[i] - 'a') - a) % 26 + 'a';
        }
    }
    printf("解密后的明文为:\n");
    printf("%s", arr);
    printf("\n");
}

全部代码:

#include <stdio.h>
#include<string.h>
//加密
void Encrypt(char *arr,int a) {
    int i = 0;
        for (i = 0; i < strlen(arr); i++) {
            if (arr[i] >= 'A' && arr[i] <= 'Z') {
                arr[i] = ((arr[i] - 'A') + a) % 26 + 'A';
            }
            else if(arr[i] >= 'a' && arr[i] <= 'z') {
                arr[i] = ((arr[i] - 'a') + a) % 26 + 'a';
            }
        }
        printf("加密后的密文为:\n");
        printf("%s",arr);
        printf("\n");
}
//解密
void Decry(char *arr, int a) {
    int i = 0;
    for (i = 0; i < strlen(arr); i++) {
        if (arr[i] >= 'A' && arr[i] <= 'Z') {
            arr[i] = ((arr[i] - 'A') - a) % 26 + 'A';
        }
        else if (arr[i] >= 'a' && arr[i] <= 'z') {
            arr[i] = ((arr[i] - 'a') - a) % 26 + 'a';
        }
    }
    printf("解密后的明文为:\n");
    printf("%s", arr);
    printf("\n");
}
void menu() {
    printf("1.加密\n");
    printf("2.解密\n");
    printf("0.退出\n");
}
int main()
{   
    char arr[100] = { 0 };
    int i = 0;
    int a = 0;//偏移量or秘钥 来称呼
    int modle = 0;
    do {
        menu();
        printf("请选择模式\n");
        scanf("%d", &modle);
        switch (modle) {
        case 0:
            printf("已退出\n");
            break;
        case 1:
            printf("请输入要加密的字符:\n");
            scanf("%s", arr);
            printf("请输入密钥:\n");
            scanf("%d", &a);
            Encrypt(arr, a);
            break;
        case 2:
            printf("请输入要解密的字符:\n");
            scanf("%s", arr);
            printf("请输入密钥:\n");
            scanf("%d", &a);
            Decry(arr, a);
            break;
        default:
            printf("输入错误:\n");
            break;
        }
    } while (modle);//进行循环输入,利用modle作为循环的条件
    return 0;
}

运行结果:

(大小写输入都可)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值