c++ - 二进制文件加密问题

标签 c++ file binary xor

我在加密文件中的某些数据时遇到问题。我为此使用简单的异或。 可以说我有这个结构:

struct MyFile{
char fileName[128];
int account;
float balance;};

将其保存为二进制文件工作正常,但是当我使用 xor 加密结构中的文件名并将结构保存到 hd 然后读取结构和解密文件名时,无法正确显示字符。我将这个简单的函数用于加密/解密目的。

static void Codec(const char *key,int keySize,char* in,char *result,int length)  
{
    for(int i=0;i<length;i++)
        result[i]=in[i]^key[i%keySize];
}

请注意,当我加密文件名并直接在内存中解密时,结果是正确的。我错过了什么,比如为什么保存在硬盘上时它会被更改。请尽快回复并提前tnx...

最佳答案

首先,确定数据在写入磁盘时是否真的被改变了。让你的程序在这四个地方打印出字符串:

  1. 加密之前
  2. 加密之后写入磁盘之前
  3. 从磁盘读取之后但在解密之前
  4. 解密后

#2 和#3 的结果是否相同?如果是这样,那么文件在传输到磁盘和返回磁盘的过程中没有被更改。

如果#2 和#3 不同,请尝试将未加密的字符串写入磁盘并读回。这是否成功?

只将一个这样的结构写入文件并在十六进制编辑器中检查文件的内容。文件在磁盘上时是什么样的?

把你写到磁盘和从磁盘读取的代码也贴出来,部分问题可能出在这里。

关于c++ - 二进制文件加密问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401341/

相关文章:

c++ - 在 Mac OS X 上使用 CUDA 5.5 时出现内核失败错误

C++ Tensorflow lite,某些函数的 undefined reference

c++ - 如何更改 OpenGL 中的视角?

c++ - 当 const 方法是公共(public)的并且非 const 方法受到保护时,为什么 C++ 不强制转换为 const?

具有多个值的 C++ 文件解析器

linux - 上传 linux 二进制文件到 maven 仓库

c - 如何消除此错误 : "integer literal is too large to be represented in a signed integer type"

c++ - 命令提示符中的字符 '<'

java - 如何使用 Files.walk 获取文件夹名称和文件名

binary - 十进制数转二进制数