凯撒密码用c语言实现

凯撒密码是历史上最简单的加密方式之一,它基于一种替换方法,即将明文中的每个字母都替换成它之后的第 N 个字母。下面是一个简单的 C 语言实现:

复制代码
#include <stdio.h>
#include <string.h>

// 加密函数,plaintext 为明文,key 为加密密钥
void encrypt(char plaintext[], int key) {
    int len = strlen(plaintext);
    for (int i = 0; i < len; i++) {
        if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {
            // 处理小写字母
            plaintext[i] = (plaintext[i] - 'a' + key) % 26 + 'a';
        } else if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
            // 处理大写字母
            plaintext[i] = (plaintext[i] - 'A' + key) % 26 + 'A';
        }
    }
}

// 解密函数,ciphertext 为密文,key 为加密密钥
void decrypt(char ciphertext[], int key) {
    int len = strlen(ciphertext);
    for (int i = 0; i < len; i++) {
        if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z') {
            // 处理小写字母
            ciphertext[i] = (ciphertext[i] - 'a' - key + 26) % 26 + 'a';
        } else if (ciphertext[i] >= 'A' && ciphertext[i] <= 'Z') {
            // 处理大写字母
            ciphertext[i] = (ciphertext[i] - 'A' - key + 26) % 26 + 'A';;
        }
    }
}

int main() {
    char plaintext[100], ciphertext[100];
    int key;
    
    // 读取明文和密钥
    printf("Enter plaintext: ");
    gets(plaintext);
    printf("Enter key: ");
    scanf("%d", &key);
    
    // 加密
    strcpy(ciphertext, plaintext);
    encrypt(ciphertext, key);
    printf("Ciphertext: %s\n", ciphertext);
    
    // 解密
    decrypt(ciphertext, key);
    printf("Decrypted plaintext: %s\n", ciphertext);
    
    return 0;
}

在这个例子中,我们将用户输入的明文和密钥传递给 encrypt 函数,该函数将加密结果存储在了 ciphertext 数组中,我们再将其打印出来。然后,我们调用 decrypt 函数并将 ciphertext 和密钥作为参数传递给它,这个函数将在原地解密密文并将结果存储在 ciphertext 中,最后我们将其打印出来以得到解密后的明文。

需要注意的是,在处理小写和大写字母时要分别加上 'a' 或 'A',并且需要对数字进行模运算以确保使用正常的字母序,使用了 gets 函数读取用户输入,需要小心输入超过字符数组容量时可能导致的缓冲区溢出问题。

相关推荐
杜小暑35 分钟前
动态内存管理
c语言·开发语言·动态内存管理
想不明白的过度思考者36 分钟前
Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
java·开发语言
YuforiaCode1 小时前
第十二届蓝桥杯 2021 C/C++组 直线
c语言·c++·蓝桥杯
我真的不会C1 小时前
QT窗口相关控件及其属性
开发语言·qt
CodeCraft Studio1 小时前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中进行数据验
开发语言·python·excel
火柴盒zhang1 小时前
websheet之 编辑器
开发语言·前端·javascript·编辑器·spreadsheet·websheet
景天科技苑1 小时前
【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
开发语言·后端·rust·match·enum·枚举与模式匹配·rust枚举与模式匹配
阿让啊1 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
椰羊~王小美1 小时前
LeetCode -- Flora -- edit 2025-04-25
java·开发语言
拾忆-eleven2 小时前
C语言实战:用Pygame打造高难度水果消消乐游戏
c语言·python·pygame