objective-c - iOS 中的 AES256 NSString 加密

标签 objective-c encryption nsstring ios5 aes

我的应用程序使用 加密和解密(或应该)一个 NSString(要加密/解密的文本)和另一个 NSString(关键字) 256 位加密。当我运行我的项目并运行加密方法时,没有任何内容被加密,文本字段只是自行清除。这是我的代码:

-(void)EncryptText {
    //Declare Keyword and Text
    NSString *plainText = DataBox.text;
    NSString *keyword = Keyword.text;

    //Convert NSString to NSData
    NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];

    //Encrypt the Data
    NSData *encryptedData = [plainData AESEncryptWithPassphrase:keyword];

    //Convert the NSData back to NSString
    NSString* cypherText = [[NSString alloc] initWithData:encryptedData encoding:NSUTF8StringEncoding];

    //Place the encrypted sting inside the Data Box
    NSLog(@"Cipher Text: %@", cypherText);
}

可以通过单击此链接下载头文件:ZIP File containing AES Implementation

有人告诉我,我需要对我的字符串使用 Base-64 编码才能获得任何结果。如果这是真的,那我该怎么做?

我还被告知 iOS 5 中的加密发生了变化,我的应用程序是 iOS 5+ ONLY 应用程序。如果这是真的,那么我需要做什么才能使这种加密在 iOS 5 上工作,或者我在哪里可以找到另一个适用于 NSString 的 AES 256 位实现。

为什么这段代码没有产生结果?

最佳答案

编辑:下面的链接引用了一个旧的实现。最新版本称为 RNCryptor .

您的代码未使用 iOS 的内置 AES 实现。它有自己的自定义实现。 AESEncryptWithPassphrase: 也错误地生成了 key ,丢弃了密码短语中的大部分熵。

在 iOS 上,您应该使用 AES 的 CCCrypt*() 函数。您还应该确保您了解加密和解密例程中发生的事情。编写看起来正确的加密代码非常容易(因为您无法通过检查读取输出),但非常不安全。

参见 Properly encrypting with AES with CommonCrypto有关上述实现问题的解释,以及如何在 iOS 上正确使用 AES。请注意,iOS 5 现在可以使用 CCKeyDerivationPBKDF

在加密之前不需要对您的字符串进行 Base-64 编码。 Base-64 编码用于需要将二进制数据转换为可以通过电子邮件轻松发送的形式或其他控制字符可能出现问题的地方。它将 8 位二进制数据转换为 7 位 ASCII 数据。这在这里没有必要也没有用。


编辑:请务必仔细阅读有关如何使用此代码的说明。简单地剪切和粘贴安全代码并希望它有效是很危险的。也就是说,RNCryptManager 的完整源代码可作为 iOS 5 Programming Pushing the Limits 的第 11 章示例代码的一部分提供。可能会有帮助[编辑:这是旧代码;我现在推荐 RNCryptor,链接在答案的顶部]。这本书(不管网站怎么说,它应该会在下周上市)包括关于如何使用此代码的更长时间的讨论,包括如何提高性能和处理非常大的数据集。

关于objective-c - iOS 中的 AES256 NSString 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287727/

相关文章:

ios - 在不同线程上调用的类的实例方法可以使用类的属性吗?

android - GCMParameterSpec 或类似的 Android API 16 到 18

java - Jasypt:加密成功,但解密失败,因为算法更强

iphone - NSArray 组件SeperatedByString Sigabrt

iphone - 形状的缩放和旋转(矩形)

ios - 如何在 uitableviewcontroller 中动态添加单元格?

Java RSA key 生成

cocoa - NSString 字符串扩展不起作用

iphone - 加快 iOS 中的标签文本更改

objective-c - 在 Objective-C 上设置淡入淡出效果