用C语言实现维吉尼亚密码加密的具体代码是什么?
时间: 2024-12-17 13:43:30 浏览: 16
维吉尼亚密码(Vigenere Cipher)是一种简单的替换式密码,我们可以用C语言编写一个简单的版本来实现。这里是一个基本的示例:
```c
#include <stdio.h>
#include <string.h>
char shift(char base, char key) {
// 加密表,A-Z对应0-25
static const char table[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int key_val = key - 'A';
if (key_val >= 0 && key_val <= 25) {
return table[(base + key_val) % 26];
} else {
printf("Invalid key character\n");
return '\0'; // 返回空字符,表示处理失败
}
}
void vigenere_encrypt(char *plaintext, char *keyword) {
int i, j;
for (i = 0, j = 0; plaintext[i]; i++) {
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
printf("%c", shift(plaintext[i], keyword[j]));
j = (j + 1) % strlen(keyword);
} else if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {
printf("%c", shift(plaintext[i] - 'a', keyword[j]) + 'a');
j = (j + 1) % strlen(keyword);
} else {
printf("%c", plaintext[i]); // 对于非字母字符不做处理
}
}
printf("\n");
}
int main() {
char plaintext[] = "Hello, World!";
char keyword[] = "KEYWORD";
vigenere_encrypt(plaintext, keyword);
return 0;
}
```
这个代码片段首先定义了一个`shift`函数,用于加密单个字符。然后,在`vigenere_encrypt`函数中,我们遍历输入的明文字符串,按照字符的ASCII值应用加密规则。注意,为了兼容大写字母和小写字母,我们分别处理它们。
要加密文本,只需将你要加密的明文和密钥传递给`vigenere_encrypt`函数即可。
阅读全文