c++ - 在 iOS 上的 C++ 中获取加密安全随机数

标签 c++ ios security random cryptography

我正在开发一个用 Objective-C 和 C++ 编写的 iOS 应用程序。在 C++ 部分,我需要加密安全随机数。

  1. 据我了解 iOS 安全模型,无法直接访问 /dev/random。对吗?

  2. 获得安全随机数的官方方法是 SecRandomCopyBytes .遗憾的是,这是一个 Objective-C 接口(interface)。有没有一种方法可以从 C++ 使用这个接口(interface),最好不用求助于 Objective-C++?

还有 arc4random , 但我现在不愿意使用任何基于 RC4 的东西......

最佳答案

在任何基于“C”的语言(包括 Swift)上获取加密安全随机数的一种方法是“C”arc4random功能。

对于随机数整数 (u_int32_t),使用 arc4random()arc4random_uniform()

对于一系列随机字节,使用 arc4random_buf() 函数用 ARC4 派生的随机数据填充长度为 nbytes 的缓冲区。

RC4是arc4random的一部分,关键是连续播种:

The arc4random() function provides a high quality 32-bit pseudo-random number very quickly. arc4random() seeds itself on a regular basis from the kernel strong random number subsystem described in random(4).

arc4random source code可用。请注意,它是通过(搅拌)部分地通过从 /dev/urandom 中读取来播种的。注意避免众所周知的 RC4 弱点。此外,初始化状态时包含时间,因此不可能两次重新生成相同的随机序列。

注意:虽然文档指出 /dev/random 会因熵不足而阻塞,但这在 OS X 上可能并非如此,它可能更像是 /dev/urandom.

关于c++ - 在 iOS 上的 C++ 中获取加密安全随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767935/

相关文章:

ios - Swift 中如何处理 UITableViewCell 中可能存在也可能不存在的元素?

asp.net - *不*使用 asp.net 成员(member)资格提供程序是一个坏主意吗?

c++ - 如何 "track"缺少 ctor 初始化列表参数?

c++ - 在源文件 (VC++) 中定义时不导出 DLL 方法

ios - 当前队列、调度队列和目标队列在GCD中是如何相互通信的?

ios - 使用 iOS 6/7 Deltas 时 UIWebView 变得太大

security - 如何拒绝访问 ASP.Net MVC 5 中的特定文件夹

forms - 使用CSRF表单 token 是否有助于预防垃圾邮件?

c++ - 如何绑定(bind)变体apply_visitor?

c++ - 调用没有对象参数编译器错误的非静态成员函数