在Swift中擦除NSData内容

Sha*_*man 0 memory security objective-c nsdata swift

我有一个NSData对象,将包含敏感数据.操作完成后,我想擦除内存以避免任何潜在的安全问题.在Objective-C中,这很容易.我可以打电话给...

memset([mySensitiveData bytes], 0, [mySensitiveData length]);
Run Code Online (Sandbox Code Playgroud)

然而,在Swift中,它并不那么简单.我尝试过相同的......

memset(mySensitiveData.bytes, 0, mySensitiveData.length)
Run Code Online (Sandbox Code Playgroud)

...但是,我收到编译错误说...

'UnsafePointer<Void>' is not convertible to 'UnsafeMutablePointer<Void>'
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题并在Swift中安全地擦除内存吗?谢谢!!

Ole*_*rov 6

NSData是不可变的,这就是它UnsafePointer<Void>用于字节指针的原因.

你应该使用NSMutableData这个,然后打电话:resetBytesInRange(NSMakeRange(0, mySensitiveData.length)).此方法将用零替换内容memset.