如何在iOS中安全地擦除文件?

当我encryption一个文件,我想覆盖其内容,不仅删除它。 我的目的是为了安全地擦除文件。 有没有办法在iOS中做到这一点?

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

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

数据是一个NSData对象

检查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是你想要重写的地方。

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

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

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

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