当我加密文件时,我想覆盖其内容,不仅要删除它。我的目的是安全地删除文件。有没有办法在iOS中执行此操作?
答案 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上写一个文件就足够了。