在swift中保存图片,用户无法访问
我有一个应用程序,允许用户拍照并立即保存,但它们当前存储在应用程序文档目录中,可通过iFunBox等程序访问。这是我如何保存图像。在swift中保存图片,用户无法访问
var imageName = "SomeGeneratedImageName.jpeg"
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
let path = documentsDirectory.stringByAppendingPathComponent(imageName)
var data = UIImageJPEGRepresentation(image, 1)
data.writeToFile(path, atomically: true)
我该在哪里保存图像,以便用户无法通过iFunBox等程序访问它们?
更新 - 用于回答
基础的zaph's回答我加密后的图片保存之前,在读取时,使用RNEncrytor这里是我保存功能:
var imageName = "someImageName.jpeg"
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
let path = documentsDirectory.stringByAppendingPathComponent(imageName)
var data = UIImageJPEGRepresentation(image, 1) //change 1 for compression
let encryptedData = RNEncryptor.faireseEncryptData(data, password: "password", error: nil)
encryptedData.writeToFile(path, atomically: true)
和
var imageName = "thatSameImageName.jpeg"
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
let path = documentsDirectory.stringByAppendingPathComponent(imageName)
var decryptedImg = RNDecryptor.faireseDecryptData(NSData(contentsOfFile: path), password: "theSamePass", error: nil)
if(decryptedImg != nil) {
//alert
var image: UIImage? = UIImage(data: decryptedImg)
}
也得到这项工作中迅速出现了一些问题与AES256,所以我加了一些类的RNEncryptor.h
,RNEncryptor.m
,RNDecryptor.h
和RNDecryptor.m
//To RNEncrpytor.h
+ (NSData *)faireseEncryptData:(NSData *)data password:(NSString *)password error:(NSError **)error;
。
//To RNEncryptor.m
+ (NSData *)faireseEncryptData:(NSData *)data password:(NSString *)password error:(NSError **)error {
return [RNEncryptor encryptData:data withSettings:kRNCryptorAES256Settings password:password error:error]; }
。
//To RNDecryptor.h
+ (NSData *)faireseDecryptData:(NSData *)data password:(NSString *)password error:(NSError **)error;
。
//TO RNDecryptor.m
+ (NSData *)faireseDecryptData:(NSData *)data password:(NSString *)password error:(NSError **)error {
return [RNDecryptor decryptData:data withSettings:kRNCryptorAES256Settings password:password error:error]; }
保存与writeToFile:options:error:
与NSDataWritingFileProtectionComplete
一个NSDataWritingOptions
或明确加密,并根据需要保存在Keychain的密码解密,看到RNCryptor一个很好的加密程序。
通常将大数据项目保存在数据库中并不是一个好的解决方案。
因此,从技术上讲,我可以将图像保存到使用此方法加密的文档目录上? – inVINCEable
是的,在Documents目录中保存照片的加密版本是安全的。 RNCryptor是一个很好的加密程序,它可以完成所有需要完成的繁琐工作。 Keychain易于使用,因为关键是弱点。如果'NSDataWritingFileProtectionComplete'足够满足您的需求,请检查结果,因为它非常简单,透明地处理加密密钥。 – zaph
如果将它保存在设备的任何位置,用户都可以访问它们。
所以有两条路可以在这个叉子上。 将它保存到设备时保持加密。并在您的应用程序需要时解密。 (查找sqlCipher for iPhone它是超级安全的) 保留在服务器上,只下载显示,但从不保存。
感谢您的帮助 – inVINCEable
通常在数据库中保存大量数据不是一个可取的解决方案。如果您需要数据库功能,请使用数据库,而不是加密。 – zaph
如果你需要加密的东西,RNCrytpor是一个不错的选择。 https://github.com/RNCryptor/RNCryptor –
NSUserDefaults。 – Arbitur
这是他们的设备。没有什么可以做,以防止他们如果他们选择窥探。 –
因此,服务器上传是解决这个问题的最好方法吗? – inVINCEable