0

下面是我尝试加密数据的代码

输入/调用我的加密方法:

[self myED:@"wcc123" :@"hahaha" :@"yyyy"];

- (NSData*) myED:(NSData*)data :(NSData*) key :(NSData*)iv{

    @try {
        // Try something
        NSLog( @"Original String: %@", data );


        size_t bufferSize = [data length]*2;
        void *buffer = malloc(bufferSize);
        size_t encryptedSize = 0;    
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,                                          
                                              [key bytes], [key length], [iv bytes], [data bytes], [data length],                                          
                                              buffer, bufferSize, &encryptedSize);  
    }
    @catch (NSException * e) {
        NSLog(@"Exception: %@", e); 
    }
    @finally {
        // Added to show finally works as well
    }


    return nil;

}

但是,当尝试运行此代码时,它会在下面提示我异常

2012-07-03 16:52:44.776 wccTest[930:f803] 异常:-[__NSCFConstantString 字节]:

任何人都可以对此提供帮助/建议吗?

4

3 回答 3

2

您的方法期望NSData,并且您正在传递NSStrings。

于 2012-07-03T09:23:58.663 回答
2

代替

[self myED:@"wcc123" :@"hahaha" :@"yyyy"];

试着打电话

[self myED:[@"wcc123" dataUsingEncoding:NSUTF8StringEncoding] :[@"hahaha" dataUsingEncoding:NSUTF8StringEncoding] :[@"yyyy" dataUsingEncoding:NSUTF8StringEncoding]];
于 2012-07-03T09:26:57.643 回答
0

在@borrrden 评论之后,我还将为您的方法提供一个不言自明的名称。例如:

- (NSData*)encryptEDData:(NSData*)data withKey:(NSData*)key initVector:(NSData*)iv {
    // same as before
}

因此,selector此方法的encryptEDData:withKey:initVector:.

您可以像这样调用该方法:

NSData* edData = //...
NSData* keyData = //...
NSData* ivData = //...
[self encryptEDData:edData withKey:keyData initVector:ivData];

此外,我会在方法中执行NSStringtoNSData转换,让它接受字符串。我认为它可以更好地理解该方法的目标。

希望有帮助。

于 2012-07-03T10:36:55.837 回答