我想在Windows上使用Intel的RDRAND特性,并生成真正的随机数(因为Python的随机模块不是那么随机的)。Python中有没有可以访问此功能的API?
我已经尝试安装下面评论中提到的rdrand模块,但我一直收到错误。日志:http://pastebin.com/A2Vqsqec
错误似乎是由rdrand.c中的以下几行抛出的:
#ifdef __GNUC__
#define USING_GCC 1
#elif __clang__
#define USING_CLANG 1
#else
#error Only support for gcc or clang currently
#error if you port to another compiler, please
#error send back the patch to https://github.com/stillson/rdrand
#endif为什么会发生这种情况?
更新:我已经检查并确保定义了__GNUC__
发布于 2017-11-14 05:59:50
您可能希望使用Python来包装C/C++例程,而不是使用RdRand()的Python实现。这里的一篇研究论文(http://iopscience.iop.org/article/10.3847/1538-4357/aa7ede/meta;jsessionid=A9DA9DDB925E6522D058F3CEEC7D0B21.ip-10-40-2-120),或者说这里的非付费版本(https://arxiv.org/abs/1707.02212)最近显示了RdRand()在Python语言中的性能有多差。尽管如此,正如论文提到的那样,RdRand和RdSeed指令并不是“真正”随机的……
希望这能有所帮助。
发布于 2018-12-02 06:27:27
你不一定需要RDRAND来保证质量的随机性。random模块的文档说明:
如果需要加密安全的伪随机数生成器,请使用
os.urandom()或SystemRandom。
os.urandom(n)的文档中写道:
返回适合加密使用的n个随机字节的字符串。
此函数从特定于操作系统的随机性来源返回随机字节。返回的数据对于加密应用程序来说应该是不可预测的,尽管其确切的质量取决于操作系统的实现。在类UNIX系统上,它将查询/dev/urandom,而在Windows上,它将使用CryptGenRandom()。
SystemRandom是基于urandom的。
https://stackoverflow.com/questions/41393847
复制相似问题