在 iOS 上使用 C++ 获取加密安全随机数

2024-03-02

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

  1. 据我了解iOS安全模型,没有办法访问/dev/random直接地。那是对的吗?

  2. 获取安全随机数的官方方法是Sec随机复制字节 https://developer.apple.com/library/ios/documentation/Security/Reference/RandomizationReference/index.html#//apple_ref/c/func/SecRandomCopyBytes。遗憾的是,这是一个 Objective-C 接口。有没有办法从 C++ 使用这个接口,最好不诉诸 Objective-C++?

还有arc4随机 https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html,但我现在不愿意使用任何基于 RC4 的东西......


获取安全随机数的官方方法是 SecRandomCopyBytes。遗憾的是,这是一个 Objective-C 接口。有没有办法从 C++ 使用这个接口,最好不诉诸 Objective-C++?

SecRandomCopyBytes是一个 C API。从C++中使用它没有问题。

这是一个完整的例子。不需要 ObjC++,即使使用花式的vector以及诸如此类的东西来表明它都是 C++ 的。显然你可以使用malloc.

#include <iostream>
#include <Security/Security.h>
#include <vector>

int main(int argc, const char * argv[]) {
    const int length = 20;
    std::vector<uint8_t> randomBytes(length, 0);

    int rc = SecRandomCopyBytes(kSecRandomDefault, randomBytes.size(), &(randomBytes[0]));
    if (rc != 0) {
        std::cout << "Failed: " << rc << std::endl;
        return 1;
    }

    for (int i = 0; i < randomBytes.size(); ++i) {
        std::cout << std::hex << +randomBytes[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS 上使用 C++ 获取加密安全随机数 的相关文章

随机推荐