我使用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;
}
答案 0 :(得分:5)
通过这种方式,可以恢复原始文件.rar,然后加密过程真的没用。
此处的陈述暗示了一个特定的用例。如果您要发送加密文件,这种加密并非无用。如果它旨在防止以后的系统损害(例如:丢失的笔记本电脑),则加密是无用的。
如果您的系统遭到入侵,任何加密不足全盘加密都不够,原始数据可能仍然可以恢复。
在上述每种情况下,您的驱动器上都存在可以进行法医恢复的原始明文。只是通过制作覆盖前一个文件的C程序,你不会逃避这种情况。
答案 1 :(得分:0)
当然可以加密文件:只需将文件映射到内存并加密数据块。将可选的IV /身份验证标记存储在文件末尾,否则您可能无法加密。
正如托马斯已经提到的,你可能会遇到SSD的问题,你很可能不会写原始文件。但是,SSD可以根据实现删除块。实际上,硬盘可以做同样的事情,但是如果扇区被标记为坏,它们通常只做这样的事情。
尽管如此,您仍然可以免受无法直接访问设备本身的人的侵害。您可以将它与SSD加密相结合以提供额外的保护(这也可以轻松破坏SSD上的数据:SSD基本上只会破坏数据加密密钥)。