设计放射密码,加密和解密用一个函数
时间: 2024-10-27 08:15:30 浏览: 22
fangshebianhuan.zip_放射
要设计一个简单的放射密码(也称为移位密码或Caesar Cipher)加密和解密函数,我们可以创建一个名为`caesar_cipher`的函数,接受三个参数:明文、偏移量(移位数)和操作类型(加密或解密)。下面是一个基本的实现:
```c
#include <stdio.h>
#include <string.h>
// 加密函数
char* caesar_encrypt(const char* plaintext, int shift, const char* operation) {
if (strcmp(operation, "encrypt") != 0) {
return "Invalid operation. Please choose 'encrypt'.";
}
int len = strlen(plaintext);
char encrypted[len + 1]; // 增加1避免数组越界
for (int i = 0; i < len; i++) {
if (isalpha(plaintext[i])) { // 检查字符是否为字母
char base = islower(plaintext[i]) ? 'a' : 'A';
encrypted[i] = ((plaintext[i] - base + shift) % 26) + base;
} else {
encrypted[i] = plaintext[i]; // 非字母字符保持不变
}
}
encrypted[len] = '\0'; // 结尾添加空字符
return encrypted;
}
// 解密函数
char* caesar_decrypt(const char* ciphertext, int shift, const char* operation) {
if (strcmp(operation, "decrypt") != 0) {
return "Invalid operation. Please choose 'decrypt'.";
}
return caesar_encrypt(ciphertext, -shift, "encrypt"); // 使用相同的逻辑,但反向移位
}
int main() {
char* message = "Hello, World!";
int shift = 3;
char operation = 'e'; // 'e' 表示加密 ('d' 表示解密)
printf("Original message: %s\n", message);
char* encrypted_msg = caesar_encrypt(message, shift, &operation);
printf("Encrypted message: %s\n", encrypted_msg);
if (operation == 'd') {
char* decrypted_msg = caesar_decrypt(encrypted_msg, shift, &operation);
printf("Decrypted message: %s\n", decrypted_msg);
free(decrypted_msg); // 不要忘记释放内存
}
return 0;
}
```
在这个例子中,`caesar_encrypt`函数用于加密文本,而`caesar_decrypt`则使用相同的逻辑进行解密,只是移位方向相反。请注意,在实际应用中,可能需要处理大小写和其他非字母字符。
阅读全文