我一直在試圖用過去一週半的時間,沒有運氣的情況下用Python生成大質數來進行RSA加密。費馬原理性測試在512比特的尺度下是不可行的,我無法將我的頭圍繞米勒 - 拉賓。 (我13歲)所有在線腳本似乎都可以在我使用的Python版本下工作。我應該怎麼做才能生成大量素數? (是的,概率素數都很好。)生成大的(512位+)素數python 3.6
0
A
回答
1
這裏是我的米勒 - 拉賓總理檢查:
def isPrime(n, k=5): # miller-rabin
from random import randint
if n < 2: return False
for p in [2,3,5,7,11,13,17,19,23,29]:
if n % p == 0: return n == p
s, d = 0, n-1
while d % 2 == 0:
s, d = s+1, d/2
for i in range(k):
x = pow(randint(2, n-1), d, n)
if x == 1 or x == n-1: continue
for r in range(1, s):
x = (x * x) % n
if x == 1: return False
if x == n-1: break
else: return False
return True
如果你想保證黃金(不是可能的素數),這不是很更難安排。有關Pocklington的方法,請參見my blog。
+0
你知道你函數的準確率嗎? –
+1
這取決於* k *的值。如果你想減少錯誤的機會,使用更大的* k *。但對於512位數字,* k *就足夠了。如果你擔心錯誤發生的可能性,請使用我的博客中描述的Pocklington方法,該方法可以保證產生質數。 – user448810
相關問題
- 1. 使用probablePrime生成素數。 probablePrime(512,randomSeed);
- 2. 在Python中生成大素數
- 3. python素數生成
- 4. 使用python 3.6和pyomo表達式生成中的錯誤3.6
- 5. Python素數生成器
- 6. iPhone上的512位整數?
- 7. 素數生成器不工作的Python
- 8. python素數生成器的問題
- 9. Python中素數的生成器
- 10. Python使用Set Comprehension生成素數
- 11. 如何在Java中乘以兩個大數字(比如512位)
- 12. Matplotlib for Python 3.6 64位窗口
- 13. CoffeeScript的素數生成
- 14. JavaScript的素數生成器
- 15. 素數生成的perl
- 16. SHA1碰撞小於512位
- 17. 的Python 3.6功能
- 18. Java中小於512位的RSA密鑰大小
- 19. renderInContext無法渲染寬度大於512像素的UIView
- 20. MYSQLdb與Python 3.6
- 21. Python 3.6 SSL:CERTIFICATE_VERIFY_FAILED
- 22. Python 3.6 memcached
- 23. Python 3.6 - Sanic Motorengine
- 24. 在Python 3.6
- 25. cx_freeze in python 3.6
- 26. cx_Oracle for Python 3.6
- 27. 在Python 3.6
- 28. 凍結Python 3.6
- 29. Python 3.6 - 根據幀大小調整Tkinter按鈕的大小
- 30. 如何在Appcelerator中生成base64編碼的SHA-512哈希?
對於您感興趣的大小的數字,Fermat素性測試應該是完全可行的。只要確定您使用的是3-arg版本的pow, 'pow(2,p-1,p)== 1' –