在iPhone上保护应用数据

6

编辑

好的,暂且不谈投反对票并不能真正帮助解决问题。如果你没有任何有用的话或者对这个问题不感兴趣,那就换个页面吧。如果你有想法或者只是想了解不同的方法,那么即使你的评论不完美或者只是一个试验性的想法,也欢迎留言。

问题:

我需要在iPhone应用程序中存储应用程序数据。

我们最初使用经典的NSDocumentDirectory路径来存储数据...但是这种方法有多“安全”呢?

不考虑越狱设备(目前我不打算解决这个问题),似乎任何用户(在任何真实设备上)都可以使用简单的iPhone浏览软件进入此文件夹并搞乱内容,从而有效地进行黑客攻击。

如果是这种情况,那么在存储安全通用数据(在这种情况下不一定是密码)时,最好使用什么“位置”或“方法”呢?

即使在这些情况下,KeyChain是否正确,还是有更好/替代的方法?

注意事项和核心问题:

我知道如何使用密钥等加密和保护数据。我不是在谈论“混淆或保护它们的内容”

这里的问题是不同的。所以让我们这样说:

“你如何避免用户访问存储文件(数据、加密、sql文件,任何你喜欢的东西)的文件夹,并以任何方式搞乱它们(这可能是删除它们、复制它们、使用十六进制编辑器访问它们并修改值等)。

重点不是“他们对其做了什么”,而是更严格的“如何确保用户根本无法接触到它们”

谢谢


我理解你因为被踩而感到沮丧(尤其是那些拒绝提供建设性反馈的人),但是踩票确实有助于未来的访问者评估问题。我们中的许多人都曾经遭受过无法解释或有争议的踩票,我只能说这一切都会水落石出。不要担心孤立的踩票。在这种情况下,我只能猜测他们认为它没有符合FAQ指南。我不知道。如果你想知道为什么会被投票,你可以在Meta上征求反馈。 - Rob
1
回答你的问题,我认为解决方案通常是加密和/或数字签名,或者以其他方式引入一些应用程序数据的CRC,以便确保数据没有被篡改,或者如果已经被篡改,允许您识别这种情况并生成适当的错误。最好假设无法防止访问/更改,但至少可以识别它并优雅地处理它。通常,加密的过程实际上既可以防止不良人员阅读您的数据,又可以识别是否已经被篡改。 - Rob
谢谢你的时间,罗布。 关于投票,挫败感来自于这样的事实:很多时候,某个人对这个话题了解得不够多,认为这个问题很明显,而且他们没有努力去思考可能存在的更不明显的问题。如果你想找一个类比,就好像有人把自己在 C++ 知识上评为 10/10 一样,只是因为他们根本不知道 C++, 只是因为他们认为他们所知道的就是所有需要知道的 :) 我们知道这很少是真的。 - Riccardo Tramma
2个回答

4
你可以使用加密算法来保护数据并将其保存在sqlite数据库或文档字典中。
请查看此应用程序,该应用程序使用安全密钥解释AES算法以加密或解密数据。
在您的应用程序中使用存储库AES256AndBase64中的帮助器类,在所需文件中导入#import "NSString+AESCrypt.h"
使用AES256EcryptWithKey:AES256DecryptWithKey:方法来加密/解密数据:
NSString* dummyString=@"Steve Job";

NSLog(@"Normal String- %@",dummyString);

NSString* encrypt_decrypt_Key=@"apple";

NSString *encryptString = [dummyString
                              AES256EncryptWithKey:encrypt_decrypt_Key];

NSLog(@"Encrypt String- %@",encryptString);

NSString *decryptString = [encryptString
                           AES256DecryptWithKey:encrypt_decrypt_Key];

NSLog(@"Decrypt String- %@",decryptString);

如果您正在使用iOS 5及以上版本,请查看这个博客,了解如何使用数据保护API、钥匙串和密码学来保护iOS应用程序数据。


嗨Mayur,感谢你的回答,但我正在尝试解决一个不同的问题。我编辑了问题以更好地解释它。 如果您需要更多信息,请告诉我。 但基本上我要找的是如何拒绝对数据的任何形式的访问。 - Riccardo Tramma

0

我不确定,但是在您的iPhone中删除应用程序后,钥匙串值并没有被清除。

加密是一种方法。或者您可以尝试一些哈希算法,如SHA或MD5来哈希您的数据。哈希后,将您的数据和哈希数据保存到NSDocumentDirectory中。当您需要检查数据是否更改时,请查看哈希数据。


谢谢您的评论,Arda。但我正在寻找更为严格的解决方案。我编辑了问题以澄清我要解决的问题。如果您需要更多信息,请告诉我。 - Riccardo Tramma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接