我遇到了一个问题,我试图从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)并且它们没有崩溃但是我解码后数据完全错误。
有关如何解决此问题的任何想法?
谢谢:)
答案 0 :(得分:1)
密文,加密函数的输出应该与随机无法区分。这意味着可以生成任何字节值,包括不映射到字符的字节值。因此,需要编码密文,例如使用base 64编码。