mm等于毫米 2024-02-09 18:15 采纳率: 25%
浏览 7

关于#c语言#的问题:文件加密.txt内容:

#求助!为什么不能进行中文加密呢?只能字符加密

//加密
int main(void)
{
    FILE* fp1 = fopen("F:\\VS\\BiJi\\文件加密.txt", "r");
    FILE* fp2 = fopen("F:\\VS\\BiJi\\文件加密_加密.txt", "w");
    if (!fp1 || !fp2)
        return -1;
    char* p = (char*)malloc(sizeof(char) * 100);
    //int* p = (int*)malloc(sizeof(int) * 100);
    srand((size_t)time(NULL));
    while (!feof(fp1))
    {
        memset(p, 0, 100);
        fgets(p, 100, fp1);
    }
    for (int i = 0; i < strlen(p); i++)
    {
        printf("%d\n", p[i]);

        short value = p[i];
        printf("%d\n", value);

        value += (rand() % 32 + 1) * 256;
        value *= -1;
        fprintf(fp2, "%d", value);
    }
    fclose(fp1);
    fclose(fp2);
    free(p);
    

    return 0;
}

#VS编译
加密结果是:

img

文件加密.txt内容:

img

#思路是:低位char转高位short,高位添加随机数,可以形成一个新的值,达到加密效果

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-02-09 18:17
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    这段代码存在一些问题,导致无法正确进行中文加密。我会逐一指出并提供解决方案:

    1. 文件读取问题:在读取文件内容时,只保存了最后一行内容,而不是全部内容。这导致后续加密操作只会针对最后一行进行,而不是整个文件。

    解决方案:需要在读取文件内容时,使用循环来逐行读取,并将每行内容追加到缓冲区中,以便后续加密操作。

    1. 加密算法问题:加密算法中的逻辑存在一些错误,导致加密不符合预期。特别是关于字符转换为 short 类型后的处理逻辑存在问题。

    解决方案:重新设计加密算法。建议采用更严谨的加密算法,例如使用现有的加密库或算法进行中文文本加密,而不是简单地进行位移和乘法操作。

    1. 文件写入问题:在将加密后的数据写入文件时,没有考虑到每个字符的写入格式,导致写入文件的内容不易理解。

    解决方案:在写入文件时,需要按照一定的格式将加密后的数据写入文件,以便于后续解密或者其他操作。

    综上所述,建议重新设计加密算法,并修复文件读取和写入的问题。以下是修改后的代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    void encryptChinese(FILE *inputFile, FILE *outputFile) {
        char buffer[1000]; // 增大缓冲区大小以容纳更多文本
        srand((unsigned int)time(NULL)); // 移动到循环外以避免重复种子
    
        while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {
            for (int i = 0; i < strlen(buffer); i++) {
                int value = (int)buffer[i];
                value += (rand() % 32 + 1) * 256;
                fprintf(outputFile, "%d ", value); // 加空格以分隔每个加密字符
            }
        }
    }
    
    int main(void) {
        FILE *inputFile = fopen("F:\\VS\\BiJi\\文件加密.txt", "r");
        FILE *outputFile = fopen("F:\\VS\\BiJi\\文件加密_加密.txt", "w");
    
        if (!inputFile || !outputFile) {
            printf("文件打开失败!\n");
            return -1;
        }
    
        encryptChinese(inputFile, outputFile);
    
        fclose(inputFile);
        fclose(outputFile);
    
        return 0;
    }
    

    以上代码对文件内容逐行进行加密,并按照一定格式将加密后的数据写入文件。这样可以更好地实现中文文本的加密需求。

    img

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月9日

悬赏问题

  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?