c - 解码文件

标签 c windows xor

#include <Windows.h>
#include <cstdio>
const int KEY=111;

void encryptStrA(char* sometext)
{
    int length;
    length=strlen(sometext);
    for(int i=0; i<length;i++)
        sometext[i]^=KEY;
}

int main(void)
{   
    FILE* pFile=fopen("pliczek","wb");
    char sign;
    char sampleString[]="Hello world!";

    encryptStrA(sampleString);
    fprintf(pFile,"%c%c%s%c%c",13^KEY,10^KEY,sampleString,13^KEY,10^KEY);
    fclose(pFile);

    pFile=fopen("pliczek","rb");
    while(!feof(pFile))
    {   
        fscanf(pFile,"%c",&sign);
        printf("%c",sign^KEY);
    }

    fclose(pFile);
    system("PAUSE");
    return 0;
}

我避开了一些棘手的事情

  1. 文件以二进制模式打开
  2. 在 encryptStrA 中,strlen 函数没有直接放在循环条件中

尽管如此,它仍然一直在输出“Hell”而不是“Hello World!”?更准确的说,是看到关键人物之后就全部砍掉。这是什么原因?我使用的操作系统中的每一行文本都以回车符 (ASCII 13) 和换行符 (10) 结尾。

最佳答案

代码 fprintf("%s", s); 期望 s 是一个以零结尾的字符串。当您到达 'o'^111 时,它会给出一个空字符,因此字符串的其余部分不会写入文件。

您可以使用 fwrite相反。

关于c - 解码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403840/

相关文章:

windows - 如何使用 Go 翻转文件的 Windows 存档位

c# - Crystal 报表显示数据库登录要求?

encryption - Apple 是否允许开发者使用 XOR 哈希来保护游戏 Assets ?

c - C 标准对两个有符号整数的按位异或有何规定?

c++ - 独立于平台的图形用户界面

C 编译器和循环优化

c - 使用外部文件中的信息,如何使用 fread 正确填充数组?

java - 为 Windows/Linux 桌面打包 Java 应用程序

c - XOR 链表 XOR 函数

c - scanf 接受 int 但仅在输入另一个 char/int 并按 enter 后才继续执行