如何安全地删除iOS中的文件?

时间:2011-09-25 18:13:10

标签: iphone ios security

当我加密文件时,我想覆盖其内容,不仅要删除它。我的目的是安全地删除文件。有没有办法在iOS中执行此操作?

4 个答案:

答案 0 :(得分:2)

打开映射的文件内存并覆盖数据,然后使用NSFileManager删除文件:

NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath: filename];
[file writeData: data];
[file closeFile];

数据是NSData对象

答案 1 :(得分:1)

检查NSFileManager

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error

例如:

NSFileManager *manager = [NSFileManager defaultManager];
NSString *filePath;
NSError *error;
if ([manager fileExistsAtPath:filePath])
{
     [manager fileExistsAtPath:filePath error:&error];
     if (error)
     {
         NSLog(@"Error occured while [removing file]: \"%@\"\n",[error userInfo]);
     }
}

用于写入同一文件:

NSOutputStream *fileStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
[fileStream open];
[fileStream write:&dataBytes maxLength:dataLength];
[fileStream close];

dataBytes是您想要重写的地方。

答案 2 :(得分:0)

要覆盖旧数据,请使用[NSFileHandle fileHandleForWritingAtPath:](只写访问权限)或fileHandleForUpdatingAtPath:(读写访问权限)打开文件。然后,您可以将标准write[myFileHandle fileDescriptor]一起使用,或使用[myFileHandle writeData:]编写NSData对象。

要删除被覆盖的文件,请使用[[NSFileManager defaultManager] removeItemAtPath:]

至于要写的 :我建议您使用预先生成的方便大小的文件(512的倍数)并使用“垃圾数据”的内容反复覆盖旧文件文件。在iOS上使用随机数生成器只对小文件有意义,因为它太慢了。您也不会通过使用随机数据获得任何(严重的)额外安全性,因此您也可以用诗歌覆盖旧文件。

答案 3 :(得分:-1)

无需多次覆盖文件。这对于闪存尤其不是必需的,因为它将使用不同的块来编写新数据。但传统的硬盘驱动器也不是这样。在ONCE上写一个文件就足够了。