当前位置:   article > 正文

用Caesar cipher(凯撒密码)写文件加密代码_c语言用凯撒密码进行加密

c语言用凯撒密码进行加密

这个程序首先定义了一个名为encryptCaesar的函数,该函数使用fread从输入文件中读取数据,使用fwrite将加密/解密后的数据写入输出文件。然后,在main函数中,程序打开输入文件和创建输出文件,并调用encryptCaesar函数进行加密/解密操作。最后,程序关闭所有文件并输出完成消息。

#include <stdio.h>
#include <string.h>

void encryptCaesar(FILE *input, FILE *output, int shift) {
    char buffer[1024];
    size_t bytesRead;

    // 从输入文件读取数据
    bytesRead = fread(buffer, sizeof(char), sizeof(buffer), input);
    if (bytesRead == 0) {
        // 文件结束或读取错误
        return;
    }

    // 对读取的数据进行加密/解密操作
    for (size_t i = 0; i < bytesRead; ++i) {
        if (buffer[i] >= 'a' && buffer[i] <= 'z') {
            buffer[i] = ((buffer[i] - 'a' + shift) % 26) + 'a';
        } else if (buffer[i] >= 'A' && buffer[i] <= 'Z') {
            buffer[i] = ((buffer[i] - 'A' + shift) % 26) + 'A';
        }
    }

    // 将加密/解密后的数据写入输出文件
    size_t bytesWritten = fwrite(buffer, sizeof(char), bytesRead, output);
    if (bytesWritten != bytesRead) {
        // 写入错误
        // 这里可以添加适当的错误处理代码
    }
}

int main() {
    const char *inputFileName = "input.txt";  // 输入文件名
    const char *outputFileName = "output.txt"; // 输出文件名
    const int shiftValue = 3;                   // 移动的字符数

    FILE *input = fopen(inputFileName, "rb"); // 打开输入文件以进行读取
    if (input == NULL) {
        printf("无法打开输入文件:%s\n", inputFileName);
        return 1;
    }

    FILE *output = fopen(outputFileName, "wb"); // 创建输出文件以进行写入
    if (output == NULL) {
        printf("无法创建输出文件:%s\n", outputFileName);
        fclose(input); // 关闭输入文件
        return 1;
    }

    encryptCaesar(input, output, shiftValue); // 对文件进行加密/解密操作

    fclose(input); // 关闭输入文件
    fclose(output); // 关闭输出文件

    printf("加密/解密完成。\n"); // 输出完成消息
    return 0; // 表示程序正常退出
}

当然可以,以下是该程序的每一步解释:

  1. 包含必要的头文件:
 
  1. c#include <stdio.h>
  2. #include <string.h>

这里包含了stdio.hstring.h头文件。stdio.h用于输入输出操作,而string.h中的函数用于处理字符串。
2. 定义encryptCaesar函数:
这个函数接受三个参数:一个输入文件指针、一个输出文件指针和一个表示移动字符数量的整数。
3. 打开输入文件:
使用fopen函数以只读二进制模式("rb")打开输入文件。如果文件打开失败,程序会输出一个错误消息并退出。
4. 创建输出文件:
使用fopen函数创建一个新的输出文件,并以写入二进制模式("wb")打开它。如果文件创建失败,程序将关闭已打开的输入文件并退出。
5. 调用encryptCaesar函数进行加密/解密操作:
这个函数读取输入文件中的数据,对每个字符进行加密或解密操作,然后将结果写入输出文件。
6. 关闭文件:
使用fclose函数关闭已打开的输入和输出文件。
7. 输出完成消息:
程序输出一个消息,表示加密/解密操作已完成。
8. 返回0:
程序正常退出,返回0。

简而言之,这个程序读取一个文本文件,对文件中的每个字符进行加密或解密操作,并将结果写入另一个文本文件中。

  1. 函数参数:

    • FILE *input: 指向输入文件的指针,用于读取原始数据。
    • FILE *output: 指向输出文件的指针,用于写入加密或解密后的数据。
    • int shift: 移动字母的数量,用于加密和解密操作。正值表示向后移动,负值表示向前移动。
  2. 字符缓冲区:

 
cchar buffer[1024];

定义了一个字符数组buffer,用于存储从输入文件中读取的每一行数据。
3. 循环读取输入文件:

cwhile (fgets(buffer, sizeof(buffer), input) != NULL) { ... }

使用fgets函数从输入文件中逐行读取数据,直到文件结束。每次读取一行数据并存储在buffer中。
4. 加密/解密字符串中的每个字符:

 
cfor (int i = 0; i < strlen(buffer); ++i) { ... }

使用循环遍历读取到的每一行中的每个字符。
5. 判断字符是否为字母:
使用条件语句判断当前字符是否为小写字母或大写字母。如果是字母,则进行加密或解密操作。
6. 加密/解密操作:
对于小写字母:buffer[i] = ((buffer[i] - 'a' + shift) % 26) + 'a';
对于大写字母:buffer[i] = ((buffer[i] - 'A' + shift) % 26) + 'A';
根据凯撒密码的原理,将字母在字母表中的位置向后(或向前)移动指定的数量。通过模运算确保结果仍然在字母范围内。
7. 写入输出文件:
使用fputs函数将处理后的字符串写入输出文件。
8. 返回值:
该函数没有返回值。

简而言之,这个程序读取一个文本文件,对文件中的每个字符进行加密或解密操作,并将结果写入另一个文本文件中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/496500
推荐阅读
相关标签
  

闽ICP备14008679号