【发布时间】:2019-04-30 13:15:32
【问题描述】:
大家好,我正在我的应用中使用对称加密来加密用户相互发送的消息。现在我正在尝试创建一个相当安全的密钥来使用 NSMutableData 解密这些数据(解密密钥)。目前我有两个问题:
用于解密的 256 位密钥是否足够安全?
我在使用 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)
【问题讨论】:
-
您在哪种模式下使用哪种加密算法?您显示的代码不包含任何有关加密的代码?只有SecRandomCopyBytes 即
Generates an array of cryptographically secure random bytes.另外,你有两个问题没有真正解决。 -
我建议你把它分成两个单独的问题。正如下面这个问题的标题所建议的那样,我已经回答了“如何创建任意二进制值的字符串表示”。但加密问题似乎完全不同。
-
Re
globallyUniqueString,这似乎可以确保唯一性,但我认为没有任何迹象表明加密稳健的随机性。我会坚持使用加密函数。 -
当您发布单独的加密问题时,我建议您退后一步,提供更广泛的背景信息。生成单个加密密钥的整个概念似乎令人怀疑,引入了如何在各种设备之间共享它的问题。我本来希望您希望在每台设备上生成密钥对并交换公钥或类似的东西。
-
你不能随便拿一些随机数据说那是EC加密密钥,它不是这样工作的。您需要从
CommonCrypto原生框架中查看SecKeyGeneratePair函数,或者为此找到一个好的库。
标签: ios objective-c cryptography nsstring nsmutabledata