为什么我的initWithData在将NSData转换为NSString后通过CommonCrypto从加密返回后返回nil指示错误?
问题描述:
这里是我的代码:为什么我的initWithData在将NSData转换为NSString后通过CommonCrypto从加密返回后返回nil指示错误?
-(IBAction)encryptText:(id)sender
{
key = self.tvKey.text;
CCCryptorStatus status = kCCSuccess;
algorithm = kCCAlgorithmAES128;
CCOptions opts = kCCOptionPKCS7Padding;
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSString *plainString = [NSString stringWithFormat:@"%@", self.tvEntryText.text];
NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedData = [plainData dataEncryptedUsingAlgorithm: algorithm
key: keyData
initializationVector: nil
options: opts
error: &status];
if (status != kCCSuccess) {
NSError * err = [NSError errorWithCCCryptorStatus: status];
self.lblKeyMsg.text = [NSString stringWithFormat:@"Encryption failed: %s", [[err localizedDescription] UTF8String]];
self.lblKeyMsg.textColor = [UIColor redColor];
return;
}
NSString *encryptedString = [[[NSString alloc] initWithData:encryptedData encoding:NSUTF8StringEncoding] autorelease];
self.tvResultText.text = encryptedString;
}
倒数第二个声明,我将加密的NSData到一个NSString用于显示目的,但它回来了零。无是有效的响应指示和错误。我已经停止了该声明已运行后立即执行,并在这里是vaues:
(gdb) po keyData
<61616161 61616161 61617373 73737373 73737373 64646464 64646464 64646666>
(gdb) po key
aaaaaaaaaassssssssssddddddddddff
(gdb) po plainString
this is a test.
(gdb) po plainData
<74686973 20697320 61207465 73742e>
(gdb) po encryptedData
<f7074146 b295e340 0d947d53 9ea629cf>
(gdb) po encryptedString
Can't print the description of a NIL object.
(gdb) po status
Can't print the description of a NIL object.
(gdb)
状态是零,表明有在加密无错误。所有值都如预期的那样,但initWithData失败。下面是操作iPhone的看法:
为什么initWithData失败吗?
答
正如文档所述,initWithData:encoding:
可能返回nil,如果传递的数据不是用于编码的有效数据。与某些编码不同,您不能仅仅采用任意数据并假装它是UTF8数据 - 它必须符合UTF8规范。
您的encryptedData
NSData对象将包含看似随机的数据 - 极不可能是有效的utf8数据,因此initWithData:encoding:
很可能会失败。
如果您只是在寻找可以保存在文本框中的东西,那么您可能需要尝试对加密数据进行base64编码。
+0
宾果!谢谢 。 – Ric 2012-01-12 04:58:11
这些字节非常不可能是有效的utf8数据 – 2012-01-11 07:23:54
Fredrick,为什么?那里提供的代码会对你提到的内容负责任? – Ric 2012-01-11 17:50:57