我遇到一个问题,尝试从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/