【问题标题】:Secure App Data on iPhone保护 iPhone 上的应用程序数据
【发布时间】:2012-11-26 17:27:53
【问题描述】:

已编辑

好吧,抛开投反对票并不能真正帮助解决问题。如果您没有任何有用的内容要说并且您对问题不感兴趣,只需更改页面即可。如果您有想法或只是对了解不同的方法感兴趣,那么欢迎您的评论,即使它不完美或只是一个尝试的想法

问题:

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

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

如果不考虑越狱设备(我目前对此不感兴趣),似乎任何用户(在任何正版设备上)都可以使用简单的 iPhone 浏览软件导航到该文件夹​​并弄乱内容,有效地破解它。

如果是这种情况,用于存储安全通用数据(在这种情况下不一定是密码)的最佳“位置”或“方法”是什么。

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

注意事项和核心问题:

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

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

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

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

谢谢

【问题讨论】:

  • 我理解您在获得反对票时的沮丧(尤其是那些拒绝留下建设性反馈的人),但反对票确实有助于未来的访问者评估问题。我们中的许多人都有过无法解释或有争议的否决票,我只能说这一切都在洗礼。不要担心孤立的反对票。在这种情况下,我只能猜测他们认为它不符合FAQ guidelines。我不知道。如果您想了解为什么会这样投票,您可以在Meta 上征求反馈意见。
  • 在回答您的问题时,我认为解决方案通常是加密和/或数字签名的组合,或者以其他方式引入您的应用数据的一些 CRC,这样您就可以确保数据没有被更改,或者如果有,允许您识别这种情况并生成相应的错误。假设您无法阻止访问/更改,但至少识别它并优雅地处理它,这可能是谨慎的。不过,通常情况下,加密过程在功能上既可以防止不法分子读取您的数据,也可以识别数据是否已被更改。
  • 感谢您抽出宝贵时间 Rob :)。关于投票,挫败感来自这样一个事实,即经常有人对该主题知之甚少,认为问题很明显,并且没有努力(或能力)去思考也许有一些不太明显的东西代表真正的问题。如果你想要一个平行线,就像某人在 C++ 知识方面的得分为 10/10,仅仅是因为他们实际上根本不知道,只是因为他们认为他们所知道的实际上就是所有需要的东西已知 :) 而且我们知道这很少是真的。
  • @RiccardoTramma 你得到解决方案了吗?

标签: ios iphone xcode security


【解决方案1】:

您可以使用加密算法来保护数据并保存在sqlite db或文档字典中的文件中。

请看这个application,这个应用程序解释了使用安全密钥加密或解密数据的AES算法。

在您的应用程序中使用来自存储库 AES256AndBase64 的 Helper 类, #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 及更高版本,请查看此blog

【讨论】:

  • 嗨 Mayur,感谢您的回答,但我正在尝试解决不同的问题。我编辑了问题以更好地解释它。如果您需要有关它的更多信息,请告诉我。但本质上,我正在寻找的是如何拒绝对数据的任何形式的访问。
【解决方案2】:

我不确定,但是,在您的 iPhone 中删除应用程序后,密钥链值不会被删除。

加密是一种方法。或者您可以尝试一些哈希算法,例如 SHA 或 MD5 来对您的数据进行哈希处理。散列后,您将数据和散列数据保存到 NSDocumentDirectory。当你需要你的数据时,通过查看散列数据检查它是否发生了变化。

【讨论】:

  • 感谢您对 Arda 的评论,但我正在寻找更具限制性的解决方案。我编辑了问题以澄清我要解决的问题。如果您需要更多信息,请告诉我。
猜你喜欢
  • 2011-01-31
  • 2012-04-23
  • 2011-02-22
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多