C语言实现简单加密算法 凯撒密码 RSA算法 简介及实现_c语言凯撒加密函数
在C语言中实现基本的凯撒密码加密和解密功能,以下是核心函数的示例代码:
#include <stdio.h>
#include <string.h>
// 确定密钥长度
#define KEY_LENGTH 26
// 基本的密钥映射
char key_map[KEY_LENGTH + 1];
// 初始化密钥映射
void init_key_map() {
for (int i = 0; i < KEY_LENGTH; i++) {
key_map[i] = 'A' + i;
}
key_map[KEY_LENGTH] = '\0'; // 字符串结束符
}
// 根据密钥生成密钥映射
void generate_key_map(char key[KEY_LENGTH]) {
for (int i = 0; i < KEY_LENGTH; i++) {
int j;
for (j = 0; j < KEY_LENGTH; j++) {
if (key[i] == key_map[j]) {
break;
}
}
// 如果是重复字符,则放在字母表的末尾
if (j == KEY_LENGTH) {
key_map[i] = key[i];
} else {
key_map[i] = key_map[(j + 1) % KEY_LENGTH];
}
}
}
// 加密函数
void encrypt(char plaintext[], char ciphertext[]) {
for (int i = 0; plaintext[i] != '\0'; i++) {
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
ciphertext[i] = key_map[(plaintext[i] - 'A') % KEY_LENGTH];
} else {
ciphertext[i] = plaintext[i];
}
}
ciphertext[strlen(plaintext)] = '\0'; // 字符串结束符
}
// 解密函数
void decrypt(char ciphertext[], char plaintext[]) {
for (int i = 0; ciphertext[i] != '\0'; i++) {
if (ciphertext[i] >= 'A' && ciphertext[i] <= 'Z') {
for (int j = 0; j < KEY_LENGTH; j++) {
if (key_map[j] == ciphertext[i]) {
plaintext[i] = 'A' + (j - 1 + KEY_LENGTH) % KEY_LENGTH;
break;
}
}
} else {
plaintext[i] = ciphertext[i];
}
}
plaintext[strlen(ciphertext)] = '\0'; // 字符串结束符
}
int main() {
char key[KEY_LENGTH] = "KEY";
char plaintext[KEY_LENGTH + 1] = "HELLO";
char ciphertext[KEY_LENGTH + 1];
char decryptedtext[KEY_LENGTH + 1];
init_key_map();
generate_key_map(key);
printf("Plaintext: %s\n", plaintext);
encrypt(plaintext, ciphertext);
printf("Ciphertext: %s\n", ciphertext);
decrypt(ciphertext, decryptedtext);
printf("Decryptedtext: %s\n", decryptedtext);
return 0;
}
这段代码首先定义了密钥长度KEY_LENGTH
,然后初始化了一个密钥映射数组key_map
。init_key_map
函数用于初始化key_map
数组。generate_key_map
函数根据用户提供的密钥生成新的密钥映射。encrypt
和decrypt
函数分别用于加密和解密文本。在main
函数中,我们使用了示例密钥"KEY"和文本"HELLO"来演示加
评论已关闭