【问题标题】:Simulating /dev/random on Windows在 Windows 上模拟 /dev/random
【发布时间】:2012-06-10 10:23:59
【问题描述】:

我现在正在尝试将 python 代码从 linux 移植到 windows。在不同的地方,随机数是通过读取 /dev/random 生成的。有没有办法在 Windows 上模拟 /dev/random?

我正在寻找一种可以让代码在 linux 上可用的解决方案...

【问题讨论】:

标签: python windows linux random


【解决方案1】:

/dev/random 如果您安装了 Cygwin,则可用。在 Cygwin 控制台窗口中,您将能够运行命令:

tom@myHost ~
$ hexdump -C -n 8 /dev/random
00000000  4f 9d 57 cc 9a 01 aa cb                           |O.W.....|
00000008

假设您将 Cygwin 的 bin 目录添加到您的路径中,您也可以在 Window 命令提示符窗口中运行该命令,但它只能使用 Cygwin 命令。

Microsoft Windows [Version 10.0.18363.778]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\tom>hexdump -C -n 8 /dev/random
00000000  01 99 93 1d 51 f0 dd f4                           |....Q...|
00000008

不知道这对你有没有帮助!我认为你不能将它用作设备文件,你可以在没有某种技巧的情况下从应用程序内部读取它:参见https://www.codeproject.com/articles/66235/interacting-with-shell-applications-made-easy

【讨论】:

  • 我突然想到,你可以这样做:>cat /dev/random |你的应用程序。我尝试使用dos命令“more”代替“yourApp”,效果很好!不知道当熵为空且随机位被阻塞时是否会遇到其他问题。但这似乎是可行的!
【解决方案2】:

如果您使用的是 Python,为什么要关心具体的实现?只需使用the random module 并让它处理它。

除此之外,(如果你不能依赖软件状态)os.urandom 提供基于操作系统的随机值:

在类 UNIX 系统上,这将查询 /dev/urandom,在 Windows 上它 将使用 CryptGenRandom。

(注意random.SystemRandom为此提供了一个很好的接口)。

如果您真的认真对待它是加密随机的,您可能需要查看PyCrypto

【讨论】:

    【解决方案3】:

    您可以致电 random.SystemRandom。这将在 Windows 上使用 CryptGenRandom,在 Linux 上使用 /dev/urandom。

    否则,Cygwin 的 /dev/random 总是存在?

    【讨论】:

      【解决方案4】:

      您可以使用 Python 标准库中的 random

      【讨论】:

      • -1。来自链接页面:“Mersenne Twister 是现有测试最广泛的随机数生成器之一。但是,它具有完全确定性,并不适合所有用途,并且完全不适合加密用途。" 所以它不能替代 /dev/random(它是加密随机的)。
      • OP 没有说明加密目的,而 random.SystemRandom(它是随机的。*)使用适合加密的 os.urandom。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多