1

我正在尝试将AES256字符串从 iPhone 应用程序发送到服务器并返回。

使用以下内容,我可以成功地加密字符串并使用以下代码解密字符串:-

// Encryption Methods
NSString *theStringToDecrypt = @"{\"String\":\"This is a string\"}";
NSData *theEncodedString = [theStringToDecrypt dataUsingEncoding:NSUTF8StringEncoding]; // NSUTF8 Encrypt the string
NSData *encryptedData = [theEncodedString AES256EncryptWithKey:theKey]; // Encrypt to AES-256
NSData *decryptedData = [encryptedData AES256DecryptWithKey:theKey]; // Decrypt from AES-256
NSString *theDecodedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]; // NSUTF8 Decode the string
NSString *theString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]; // NSUTF8 Decode the string
NSLog(@"theDecryptedKey=%@ | theEncryptedKey=%@",theString,theDecodedString);

因此,这会抓取一个字符串,转换为NSData使用UTF8 编码,然后使用AES256. 然后它解密NSData并转换回字符串。

这可以正常工作并成功加密/解密字符串。

我遇到的问题是,我从服务器将数据作为解密字符串返回,因此需要传递一个字符串来AES256DecryptWithKey简单地解密它,但AES256DecryptWithKey 仅适用于NSData.

这会导致问题,因为我已经有一个加密的字符串,所以转换为数据然后加密AES包括 UTF8 编码,所以我实际上只是将UTF8字符串转换回解密的字符串。

我在这里错过了一些简单的东西还是在工作中有更黑暗的力量?

4

1 回答 1

0

不要将二进制数据(密文)视为 UTF-8。密文不是字符串。

如果您的协议不处理二进制数据,则必须使用二进制到文本编码(如 Base64)将密文转换为字符串。

于 2013-07-10T10:08:43.567 回答