我想通过Powershell中的内置加密提供程序生成一个2048位的质数。这是我目前拥有的代码,但是通过Rabin-Miller测试的结果告诉我,这个数字不是质数。这里出了什么问题?
$rsa = [System.Security.Cryptography.RSA]::Create(2048)
$format = [System.Security.Cryptography.CngKeyBlobFormat]::GenericPrivateBlob
$bytes = $rsa.Key.Export($format)
[bigint]$prime = 0
foreach($b in $bytes) {$prime = ($prime -shl 8) + $b}
$prime
这个链接告诉我,BLOB应该包含两个RSA素数,但由于任何原因,我无法获得预期的信息:https://learn.microsoft.com/en-us/windows/win32/seccrypto/rsa-schannel-key-blobs#private-key-blobs
1条答案
按热度按时间m1m5dgzv1#
最后,我在更深入地研究了通用BLOB格式之后解决了这个问题。这里的学习点是这样一个事实,即4096 RSA密钥包括两个2048位素数。一个在BLOB的最后256字节上,另一个素数在其前面的256字节中。
下面是工作代码:
此外,我创建了一个小函数的基础上,上述发现,产生一个随机大素数: