我有一个包含敏感数据的NSData对象。操作完成后,我想擦除内存以避免任何潜在的安全问题。在Objective-C中,这很容易。我可以打电话给...
memset([mySensitiveData bytes], 0, [mySensitiveData length]);
然而,在斯威夫特,它并不那么简单。我尝试了相同的......
memset(mySensitiveData.bytes, 0, mySensitiveData.length)
...但是,我收到编译错误说...
'UnsafePointer<Void>' is not convertible to 'UnsafeMutablePointer<Void>'
任何想法如何解决这个问题并在Swift中安全擦除内存?谢谢!
答案 0 :(得分:6)
NSData
是不可变的,这就是为什么它使用UnsafePointer<Void>
作为字节指针的原因。
您应该使用NSMutableData
,然后致电:resetBytesInRange(NSMakeRange(0, mySensitiveData.length))
。此方法将用memset
替换为零的内容。