网站首页 网站地图
网站首页 > 游戏秘籍 > 凯撒密码c语言程序

凯撒密码c语言程序

时间:2026-04-03 06:24:20

当然可以!下面是一个使用 C语言 实现的 凯撒密码(Caesar Cipher) 程序。凯撒密码是一种简单的替换密码,通过将字母表中的每个字母向前或向后移动固定位数(通常为 3)来加密或解密文本。

✅ 一、凯撒密码原理

  • 加密plaintext -> cipher,每个字母替换为字母表中向前(或向后)移动 shift 位的字母。
  • 解密cipher -> plaintext,每个字母替换为字母表中向后(或向前)移动 shift 位的字母。

✅ 二、C语言实现

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

// 函数:凯撒密码加密
char encrypt(char c, int shift) {
    if (c >= 'a' && c <= 'z') {
        return ((c - 'a' + shift) % 26 + 'a');
    } else if (c >= 'A' && c <= 'Z') {
        return ((c - 'A' + shift) % 26 + 'A');
    }
    return c; // 如果是其他字符,保持不变
}

// 函数:凯撒密码解密
char decrypt(char c, int shift) {
    if (c >= 'a' && c <= 'z') {
        return ((c - 'a' - shift) % 26 + 'a');
    } else if (c >= 'A' && c <= 'Z') {
        return ((c - 'A' - shift) % 26 + 'A');
    }
    return c; // 如果是其他字符,保持不变
}

// 函数:加密字符串
char* encryptString(const char* str, int shift) {
    int len = strlen(str);
    char* result = (char*)malloc(len * sizeof(char));
    for (int i = 0; i < len; i++) {
        result[i] = encrypt(str[i], shift);
    }
    return result;
}

// 函数:解密字符串
char* decryptString(const char* str, int shift) {
    int len = strlen(str);
    char* result = (char*)malloc(len * sizeof(char));
    for (int i = 0; i < len; i++) {
        result[i] = decrypt(str[i], shift);
    }
    return result;
}

// 主函数
int main() {
    char input[100];
    int shift = 3; // 默认移位数
    char* encrypted = NULL;
    char* decrypted = NULL;

    printf("请输入要加密的字符串:");
    fgets(input, sizeof(input), stdin);
    input[strcspn(input, "\n")] = 0; // 去除换行符

    encrypted = encryptString(input, shift);
    decrypted = decryptString(input, shift);

    printf("加密结果: %s\n", encrypted);
    printf("解密结果: %s\n", decrypted);

    free(encrypted);
    free(decrypted);
    return 0;
}

✅ 三、运行示例

请输入要加密的字符串:Hello, World!
加密结果: Khoor, Zruog
解密结果: Hello, World!

✅ 四、可选扩展

  • 支持任意 shift 值(如 shift = 5)。
  • 支持大小写字母区分。
  • 支持非字母字符(如数字、符号)保持不变。
  • 可以添加 GUI 界面(使用 ncursesGTK)。

✅ 五、注意事项

  • fgets 用于读取输入,strcspn 用于去除换行符。
  • free 用于释放内存,避免内存泄漏。
  • 该程序仅适用于 ASCII 字符,不支持 Unicode。

如果你需要将程序编译为可执行文件,可以使用以下命令:

gcc caesar.c -o caesar
./caesar

如果你需要我帮你写一个图形界面版本(用 ncursesGTK),也可以告诉我!