NSMutableData到NSString

时间:2018-11-28 15:18:12

标签: ios objective-c cryptography nsstring nsmutabledata

大家好,我在应用程序中使用对称加密来加密用户彼此发送的消息。现在,我正在尝试创建一个相当安全的密钥,以使用NSMutableData解密此数据(解密密钥)。目前,我有两个问题:

  1. 用于解密的256位密钥足够安全吗?

  2. 我在使用NSString时遇到了一些问题。当我想检索NSMutableData的字符串值时,我的NSLog总是向我返回空值

我在哪里做错了?

NSMutableData *masterKey = [NSMutableData dataWithLength:32];
    int result = SecRandomCopyBytes(kSecRandomDefault, 32, masterKey.mutableBytes);
    if (result != noErr) {
        NSLog(FAILED_MASTERKEY);
        return;
    }
NSLog(@"MASTER %@",[[NSString alloc] initWithData:masterKey encoding:NSUTF32StringEncoding]);

2018-11-28 16:06:31.803868+0100 [41860:9341804] MASTER (null)

1 个答案:

答案 0 :(得分:3)

您不能直接从任意二进制数据创建NSString。替代范围包括显示十六进制表示形式(例如,来自description方法)或使用其他一些二进制数据的文本表示形式(例如,base-64)。但是,您不能只将随机二进制数据传递到-[NSString initWithData:encoding:]

NSLog(@"Hex:     %@", [masterKey description]);
NSLog(@"Hex:     %@", masterKey);                                   // directly logging the `NSData` will also use its `description`
NSLog(@"Base 64: %@", [masterKey base64EncodedStringWithOptions:0]);

通过Web服务交换二进制数据的常用技术是base-64。但是,如果仅是为了记录该值,以便可以看到确实生成了一个值,则仅记录其description是最简单的。