加密文件而不创建新文件

时间:2017-02-24 17:57:33

标签: 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;   
  }

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:0)

当然可以加密文件:只需将文件映射到内存并加密数据块。将可选的IV /身份验证标记存储在文件末尾,否则您可能无法加密。

正如托马斯已经提到的,你可能会遇到SSD的问题,你很可能不会写原始文件。但是,SSD可以根据实现删除块。实际上,硬盘可以做同样的事情,但是如果扇区被标记为坏,它们通常只做这样的事情。

尽管如此,您仍然可以免受无法直接访问设备本身的人的侵害。您可以将它与SSD加密相结合以提供额外的保护(这也可以轻松破坏SSD上的数据:SSD基本上只会破坏数据加密密钥)。