用c语言实现,导入文本文件分别用凯撒密码进行加法和乘法加密解密的代码
时间: 2024-09-10 19:03:28 浏览: 65
在C语言中,我们可以使用凯撒密码(也称移位密码)对文本进行加密和解密。这是一个简单的替换式加密算法,通过将每个字符移动固定数量的位置来进行操作。以下是基本的步骤:
首先,我们需要读取文件内容,然后创建两个函数,一个用于加密,另一个用于解密,它们都会根据给定的偏移量进行操作。
```c
#include <stdio.h>
#include <string.h>
// 函数声明
void caesar_encrypt(char* plaintext, int shift, char* ciphertext);
void caesar_decrypt(char* ciphertext, int shift, char* plaintext);
int main() {
const char* input_file = "input.txt";
const char* output_file = "output.txt";
FILE* file;
char buffer[1000];
char encrypted_buffer[1000];
int shift;
// 打开输入文件
if ((file = fopen(input_file, "r")) == NULL) {
perror("Error opening file");
return 1;
}
// 读取文件内容
fgets(buffer, sizeof(buffer), file);
fclose(file);
// 加密过程
printf("Enter the shift for encryption (1-25): ");
scanf("%d", &shift);
caesar_encrypt(buffer, shift, encrypted_buffer);
// 输出加密后的结果到新文件
if ((file = fopen(output_file, "w")) == NULL) {
perror("Error writing to file");
return 1;
}
fprintf(file, "%s", encrypted_buffer);
fclose(file);
// 解密过程
printf("\nEncrypt again with the same shift to decrypt or enter a different shift for demonstration: ");
scanf("%d", &shift);
caesar_decrypt(encrypted_buffer, shift, buffer); // 注意这里是加密缓冲区,因为加密和解密用的是相同的偏移
// 写回原文件
if ((file = fopen(input_file, "w")) == NULL) {
perror("Error writing to file");
return 1;
}
fprintf(file, "%s", buffer);
fclose(file);
return 0;
}
// 加密函数
void caesar_encrypt(char* plaintext, int shift, char* ciphertext) {
for (size_t i = 0; plaintext[i] != '\0'; ++i) {
ciphertext[i] = (plaintext[i] + shift - 'a') % 26 + 'a';
}
ciphertext[strlen(plaintext)] = '\0'; // 添加字符串结束符
}
// 解密函数
void caesar_decrypt(char* ciphertext, int shift, char* plaintext) {
caesar_encrypt(ciphertext, -shift, plaintext);
}
```
在这个例子中,用户需要提供加密所需的偏移量,然后程序会读取输入文件的内容,对其进行加密并保存到新的输出文件中。再次使用相同的偏移量,可以解密回去。
注意:这个示例假设输入文件只包含小写字母,并且没有考虑非字母字符的情况。如果需要处理更复杂的数据,例如混合大小写、数字或其他特殊字符,你需要增加额外的检查和调整。
阅读全文