gpt4 book ai didi

ios - 在 iOS 中使用 SecRandomCopyBytes( ) 的随机 256 位 key

转载 作者:可可西里 更新时间:2023-11-01 06:20:41 25 4
gpt4 key购买 nike

我一直在使用 UUIDString 作为存储在我的 iPAD 上的文件的加密 key ,但第三方对我的应用程序进行的安全审查建议如下。

随着应用程序的启动,将生成一个全局数据库 key 并将其存储在钥匙串(keychain)中。生成时使用iOS提供的类NSUUID的UUIDString方法。该函数生成由字母 A 到 F、数字和连字符组成的随机字符串,并且不必要地限制 key 空间,导致熵减弱。由于 key 仅由应用程序逻辑使用,不需要由个人读取、理解或处理,因此无需将 key 空间限制为可读字符。因此,应使用通过SecRandomCopyBytes ()生成的随机256位 key 作为主 key 。

现在我搜索了很多并尝试了一些代码实现,但还没有找到确切的东西。我尝试过的:

NSMutableData* data = [NSMutableData dataWithLength:32];
int result = SecRandomCopyBytes(kSecRandomDefault, 32, data.mutableBytes);
NSLog(@"Description %d",result);

我的理解是,这应该给我一个整数,我应该将它转换为 NSString 并将其用作我的 key ,但我很确定这不是这里所需要的,而且上面的方法总是给出结果为 0。我完全迷失在这里,感谢任何帮助。

谢谢。

最佳答案

SecRandomCopyBytes should always be 0结果 ,除非有一些错误(我无法想象为什么会发生这种情况)然后结果将是 -1。您不会将 that 转换为 NSString。

您要获取的是写入可变字节部分的随机字节,这就是您将用作“主 key ”而不是 UUID 字符串的内容。

我的做法是:

uint8_t randomBytes[16];
int result = SecRandomCopyBytes(kSecRandomDefault, 16, randomBytes);
if(result == 0) {
NSMutableString *uuidStringReplacement = [[NSMutableString alloc] initWithCapacity:16*2];
for(NSInteger index = 0; index < 16; index++)
{
[uuidStringReplacement appendFormat: @"%02x", randomBytes[index]];
}
NSLog(@"uuidStringReplacement is %@", uuidStringReplacement);
} else {
NSLog(@"SecRandomCopyBytes failed for some reason");
}

使用 UUIDString 对我来说足够安全,但听起来您的第三方安全审计公司正在努力证明他们的费用合理。

已编辑:由于 Vlad 的替代答案,我现在开始收集反对票,而且我无法删除我的(因为它仍然具有已接受的复选标记),这是我的代码的另一个版本。我使用 16 个随机字节(在转换为十六进制时翻倍)。

关于ios - 在 iOS 中使用 SecRandomCopyBytes( ) 的随机 256 位 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com