- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在使用 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/
当我尝试存档我的应用程序的新版本时,我在 xCode 上遇到错误,我无法弄清楚它来自哪里以及如何修复它。 查看来自 xcode 的打印屏幕:Screenshot 最佳答案 iOS 11 更改了该方
我主要对 SecRandomCopyBytes 在 iOS 上的实现感兴趣,如果它与 OS X 实现不同的话。 (我假设它确实如此,因为移动设备比台式计算机拥有越来越多的可用熵源。) 有没有人知道:
我正在使用 SecRandomCopyBytes用于生成安全的随机数。 有没有办法指定“范围”? 我需要获得这段 Java 代码的相同行为: SecureRandom r = new SecureRa
我想在 Swift 3.0 中使用 SecRandomCopyBytes 生成随机字节。这是我在 Swift 2.2 中的做法 private static func generateRandomBy
在 Objective-C 中,我可以这样做: NSMutableData *data = [NSMutableData dataWithLength:length]; int result = Se
我想在 Swift 3.0 中使用 SecRandomCopyBytes 生成随机字节。这是我在 Swift 2.2 中的做法 private static func generateRandomBy
许多用户空间 CSPRNG 有一个问题,即在 fork(2) 之后,两个不同的进程可能会返回相同的随机字节流。 通过查看 dtruss,很明显 SecRandomCopyBytes 至少是从 /dev
请任何人澄清在 SecRandomCopyBytes 中使用了哪种类型的提供程序(SHA1PRNG 或 NativePRNG)。提前致谢。 最佳答案 SHA1PRNG 和 NativePRNG 是随机
我一直在使用 UUIDString 作为存储在我的 iPAD 上的文件的加密 key ,但第三方对我的应用程序进行的安全审查建议如下。 随着应用程序的启动,将生成一个全局数据库 key 并将其存储在钥
我是一名优秀的程序员,十分优秀!