密码移位代码c语言实现利用移位密码E={E:Z26→Z26, Ek (m) = m + k (mod26)| m∈M, k∈K } 要求K的值和明文要求接受键盘输入,写出进行加密和解密的程序。
时间: 2024-11-27 08:12:46 浏览: 15
在C语言中,我们可以创建一个简单的移位密码(Caesar Cipher)程序,其加密和解密过程是基于字母表的循环移位。以下是程序的基本实现,它接受用户输入的密钥和明文,并进行相应的加密和解密操作:
```c
#include <stdio.h>
#include <string.h>
#define ALPHABET_SIZE 26
// 函数声明
void caesar_encrypt(char *text, int shift);
void caesar_decrypt(char *text, int shift);
int main() {
char plaintext[100], ciphertext[100], key;
printf("请输入明文:\n");
fgets(plaintext, sizeof(plaintext), stdin); // 读取一行输入
plaintext[strlen(plaintext) - 1] = '\0'; // 去掉换行符
printf("请输入密钥 (1-%d): ", ALPHABET_SIZE);
scanf("%d", &key);
key--;
// 加密部分
caesar_encrypt(plaintext, key);
printf("加密后的文本: %s\n", ciphertext);
// 解密部分
ciphertext[strlen(ciphertext)] = '\0'; // 确保指针指向结尾
caesar_decrypt(ciphertext, key);
printf("解密后的文本: %s\n", ciphertext);
return 0;
}
// 加密函数
void caesar_encrypt(char *text, int shift) {
int len = strlen(text);
for (int i = 0; i < len; ++i) {
if (isalpha(text[i])) { // 检查是否为字母
// 对大写字母和小写字母分别处理
if (isupper(text[i]))
text[i] = ((text[i] - 'A' + shift) % ALPHABET_SIZE) + 'A';
else
text[i] = ((text[i] - 'a' + shift) % ALPHABET_SIZE) + 'a';
}
}
}
// 解密函数
void caesar_decrypt(char *text, int shift) {
caesar_encrypt(text, -shift); // 解密时使用负数移位
}
```
在这个程序中,`caesar_encrypt`函数接收一个字符串和一个整数作为参数,对字符串中的每个字母进行移位操作。同样,`caesar_decrypt`函数则是解密的部分,它通过调用`caesar_encrypt`并传入负移位值来达到目的。
注意,这里我们假设用户输入的密钥小于等于字母表大小(26),并且只考虑英文字符。对于非字母字符,原样保留。
阅读全文