我遇到一个问题,尝试从OpenSSL创建的加密数据中创建NSString,而该字符串一直为nil。

我用于加密和解密数据的代码来自以下链接http://saju.net.in/code/misc/openssl_aes.c.txt

现在,这里是我用来加密数据的代码(“ aes_init”当然是在应用程序init上调用的):

//-- encrypt saved data
int textLen = str.size();
char* buff = const_cast<char*>(str.c_str());

EVP_CIPHER_CTX encryptCtx;
unsigned char *ciphertext = aes_encrypt(&encryptCtx,
                                    reinterpret_cast<unsigned char*>(buff),
                                    &textLen);

NSString * nsstring = [[NSString alloc] initWithBytes:reinterpret_cast<const char*>(ciphertext)
                                    length:strlen(reinterpret_cast<const char*>(ciphertext))
                                        encoding:NSUTF8StringEncoding];
[nsstring autorelease];

UIApplication* clientApp = [UIApplication sharedApplication];
AppController* appController = ((AppController *)clientApp.delegate);
[appController saveData:nsstring]; //--> crash at this line


我尝试了不同的编码(NSASCIIStringEncoding和NSUnicodeStringEncoding),它们不会崩溃,但是在解码后数据完全错误。

关于如何解决此问题的任何想法?

谢谢 :)

最佳答案

密文(加密功能的输出)应与随机无区别。这意味着可以生成任何字节值,包括不映射到字符的字节值。因此,需要对密文进行编码,例如使用base 64编码。

关于ios - 带有openssl加密数据的NSString initWithBytes使用NSUTF8StringEncoding返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24870080/

10-14 23:44
查看更多