如何在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上使用随机数生成器只会对小文件有意义,因为它太慢了。 你也不会通过使用随机数据获得任何(严重的)额外的安全性,所以你可以用一首诗来覆盖旧文件。
不需要多次覆盖文件。 这对闪存尤其不必要,因为它将使用不同的块来写入新的数据。 但传统硬盘也不是这样。 一次写入一个文件就足够了。