![Windows 上是否有可以通过 CMD 或 Powershell 提供加密安全的随机字节的设备或可执行文件?](https://linux22.com/image/1586750/Windows%20%E4%B8%8A%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20CMD%20%E6%88%96%20Powershell%20%E6%8F%90%E4%BE%9B%E5%8A%A0%E5%AF%86%E5%AE%89%E5%85%A8%E7%9A%84%E9%9A%8F%E6%9C%BA%E5%AD%97%E8%8A%82%E7%9A%84%E8%AE%BE%E5%A4%87%E6%88%96%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%EF%BC%9F.png)
本质上,我正在寻找/dev/urandom
Linux 上的 Windows 对应版本。
我知道我可以通过 C++ API 使用 Windows CNG,但不知道是否有可用的(可移植的)方法通过命令行访问任何现代 Windows 系统上的随机字节。
答案1
任何可以通过 .NET(例如 C#)使用的东西,也可以通过 PowerShell 使用,其中包括密码学.随机数生成器类。(在 .NET Core 2.x 中,该类通过 CNG 实现BCryptGenRandom()在 Windows 上,OpenSSLRAND_bytes()在 Linux 上,AppleCryptoCCRandomGenerateBytes()在 macOS 上。
$bytes = New-Object byte[](8)
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rng.GetBytes($bytes)
(代码改编自CryptoGetRandom.ps1来自微软的“脚本中心”。原始脚本使用了该类RNGCryptoServiceProvider
,它几乎是相同的,但在古老的 .NET 1.x 运行时版本中不可用。)