加密文件而不创建新文件

1 openssl

我用openssl库编写了一个C程序,用AES加密/解密文件.问题是我无法工作(读取:加密)相同 file.rar.相反,我所能做的就是创建一个新的file.rar.enc然后删除原始file.rar.

通过这种方式,可以恢复原始数据file.rar,因此加密过程实际上是无用的.在加密/解密期间有没有办法在同一个文件中操作?

这是我的C代码:

  FILE *ifp = fopen(to_encrypt, "rb");
  FILE *ofp = fopen(new_name, "wb");
  int bytes_read, bytes_written, num=0;
  unsigned char indata[AES_BLOCK_SIZE], outdata[AES_BLOCK_SIZE];
  unsigned char skey[17],iv[] = "myIV";
  strcpy(skey, "myKey");  
  AES_KEY key;
  AES_set_encrypt_key(skey, 128, &key);

  while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, iv, &num, AES_ENCRYPT);
    bytes_written = fwrite(outdata, 1, bytes_read, ofp);
    if (bytes_read < AES_BLOCK_SIZE)   break;   
  }
Run Code Online (Sandbox Code Playgroud)

Tho*_*son 5

通过这种方式可以恢复原始文件.rar,然后加密过程真的没用.

您在此处的陈述暗示了特定的用例.如果您要发送加密文件,这种加密并非无用.如果它旨在防止以后的系统损害(例如:丢失的笔记本电脑),则加密是无用的.

如果您的系统遭到入侵,任何加密不足全盘加密都是不够的,原始数据可能仍然可以恢复.

  • 您的操作系统具有交换(磁盘上)内存.
  • 您可能用于读取现在加密的rar文件中包含的文件的程序可能已制作副本.
  • 大多数打印涉及一系列临时文件.
  • 现代SSD驱动器并没有真正"删除"任何东西,因为写入闪存导致磨损会对产品的使用寿命产生负面影响.
  • 此外,现代闪存具有耗损均衡 - 这意味着覆盖文件几乎不会删除先前的数据,而是将新数据写入新块.

在上述每种情况下,驱动器上都存在可以进行法医恢复的原始明文.你不会通过制作覆盖前一个文件的C程序来逃避这种情况.