c语言凯撒密码加解密
时间: 2024-10-15 11:04:50 浏览: 45
C语言实现凯撒密码加密和解密
凯撒密码是一种简单的替换加密方法,最早由古罗马的凯撒大帝使用。在C语言中实现凯撒密码加解密的基本思路如下:
**加解密过程:**
1. 加密时,对明文中的每个字母按照固定的位移(比如3位)向右移动,A到Z对应加密后的字母变成D到M,再从头开始循环直到Z变为Z+位移。
2. 解密时则相反,将加密后的字母向左移动相同的位数。
**示例代码(C语言):**
```c
#include <stdio.h>
#include <string.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) {
return encrypt(c, -shift); // 加密时的位移取反作为解密位移
}
void caesar_cipher(const char* plaintext, const int shift, char* ciphertext) {
for (int i = 0; plaintext[i] != '\0'; ++i) {
ciphertext[i] = encrypt(plaintext[i], shift);
}
ciphertext[i] = '\0'; // 确保字符串结束符也被复制
}
int main() {
char plaintext[100];
printf("请输入明文:");
fgets(plaintext, sizeof(plaintext), stdin);
// 移除fgets读取的换行符
plaintext[strlen(plaintext) - 1] = '\0';
char ciphertext[100];
int shift;
printf("请输入位移(如3):");
scanf("%d", &shift);
caesar_cipher(plaintext, shift, ciphertext);
printf("加密后的密文是:%s\n", ciphertext);
return 0;
}
```
**相关问题--:**
1. 如何在C语言中实现凯撒密码的可逆性?
2. 如果位移值过大导致加密后的字符超出字母范围怎么办?
3. 如何修改上述代码,让用户可以选择加密还是解密模式?
阅读全文