首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableData到NSString

NSMutableData到NSString
EN

Stack Overflow用户
提问于 2018-11-28 15:18:12
回答 1查看 93关注 0票数 0

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

  1. 用于解密的256位密钥是否足够安全?
  2. 我对NSString有一些问题。当我想检索NSMutableData的字符串值时,我的NSLog总是返回一个空值

我哪里做错了?

代码语言:javascript
复制
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]);
代码语言:javascript
复制
2018-11-28 16:06:31.803868+0100 [41860:9341804] MASTER (null)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 15:38:05

不能直接从任意二进制数据创建NSString。备选方案包括显示十六进制表示(例如来自description方法)或使用二进制数据的其他文本表示(例如base-64)。但您不能只将随机二进制数据传递给-[NSString initWithData:encoding:]

代码语言:javascript
复制
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是最简单的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53522691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档