当然可以!下面是一个使用 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 界面(使用
ncurses或GTK)。
✅ 五、注意事项
fgets用于读取输入,strcspn用于去除换行符。free用于释放内存,避免内存泄漏。- 该程序仅适用于 ASCII 字符,不支持 Unicode。
如果你需要将程序编译为可执行文件,可以使用以下命令:
gcc caesar.c -o caesar
./caesar
如果你需要我帮你写一个图形界面版本(用 ncurses 或 GTK),也可以告诉我!