【问题标题】:Encrypt and Decrypt password using objective-c使用objective-c加密和解密密码
【发布时间】:2012-07-12 18:18:32
【问题描述】:

如何加密 nsstring 并将其存储在文件中,以及如何解密。

请建议我使用 wat api...

【问题讨论】:

  • 也许你应该指定你的目标平台是什么。你是在 iPhone 上做这个吗?在 Mac OS X 上? 咳嗽 GNUstep ?

标签: objective-c


【解决方案1】:

这是我用来加密的函数。

DES_cfb64_encrypt( ( unsigned char * ) pchInputData, ( unsigned char * ) pchOutCipher, 大小, &schedule, &ParityKey, &no, DES_ENCRYPT );

我必须将其转换为 base64,以便将其存储在文件中。
pstrResult = Base64encoding(size,( unsigned char * )pchOutCipher);

【讨论】:

    【解决方案2】:

    你可以使用 gpgme

    【讨论】:

      【解决方案3】:

      如果您只需要支持 10.5 或更高版本,您可以使用 CommonCryptor API。这篇文章的第一条评论显示了一个用于加密/解密 NSData 的示例类别:

      http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

      【讨论】:

        【解决方案4】:

        虽然不是 API 调用,但您可以实现一个简单的 XOR 密码。这实现起来既快速又简单,并且取决于您的字符串的特性(即,如果它是固定长度的)可能非常安全。如果您有一个可变长度的字符串 XOR 加密可能不够安全,具体取决于您的需要。看看Wikipedia article

        【讨论】:

        • XOR 密码从不安全。这是一种可以轻松且简单地逆转的混淆。
        • 也许我弄错了,但我的印象是,使用与要加密的数据长度相等的唯一密钥在理论上是牢不可破的,实际上是“一次性密码”。使用短而重复的键确实很容易颠倒。
        • 破解异或密码所需要做的就是反汇编二进制文件并寻找与密码长度相同(或任何固定数据长度)异或的循环。然后,您不仅拥有密码,还拥有密码。这可以使用多种技术来完成,包括使用分析工具来测量 XOR CPU 指令在与磁盘上的数据加载到的内存相同区域中的使用情况。不管密码是对是错,你最终都会得到密码,一旦你有了密码,你就可以恢复明文。
        • 同样,如果您输入任意明文,您可以监控解密的内存位置,并观察它是如何被 XOR 循环转换的。由于密钥是对称的,您只需要再次异或,但这次您使用之前提供的相同明文对结果进行异或。现在你有了密码,你可以破译密文了。
        • 异或的另一个问题是,如果您已经知道部分密码,那么您已经知道部分密码。
        【解决方案5】:

        如果您要存储密码,请先确定是否需要重新使用密码,或者是否只需要检查用户输入的密码是否正确。

        如果你只需要验证用户输入的密码是否正确,那么使用哈希存储密码,并将用户输入的哈希与你存储的哈希进行比较。如果两个哈希值相等,则用户 [可能] 输入正确。在Wikipedia 上查看有关哈希的更多信息。

        如果您需要重复使用密码(即用于通过其他服务进行身份验证,例如连接到 Internet 服务),请使用Apple's Keychain service。如果您的目标是 iPhone,请查看this 相关文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-01
          • 2016-01-21
          • 1970-01-01
          • 2012-07-12
          • 2011-05-09
          • 2014-11-23
          • 1970-01-01
          相关资源
          最近更新 更多