python整数分节输出_pyfactor
pyfactor
基于python的整數(shù)分解工具
介紹
pyfactor是一個(gè)完全使用python編寫的整數(shù)分解工具,最大可以分解十進(jìn)制60位以內(nèi)的RSA數(shù)n=pq。
這個(gè)工具是我的畢業(yè)設(shè)計(jì)作品,純粹是一個(gè)實(shí)驗(yàn)性質(zhì)的小程序,和目前程序的整數(shù)分解工具
(如:msieve,yafu等等)相比,運(yùn)行效率很低。但其分解能力可以完全勝任教學(xué)目的
支持的python版本:3.5以上
依賴的庫:SymPy(推薦版本為1.3以上)
建議直接安裝Python科學(xué)計(jì)算的發(fā)行版——Anaconda,默認(rèn)就預(yù)裝了常見的python的科學(xué)計(jì)算庫。
目前只提供了核心算法包pyfactor、命令行(CLI)工具pyfactor_cli.py。
圖形界面(GUI)工具pyfactor_gui.py正在開發(fā)中,使用python默認(rèn)的GUI套件tkinter。
CLI版本只完成了一個(gè)粗糙的原型,而GUI版本可以單獨(dú)設(shè)置參數(shù)、調(diào)用具體的算法,
因此,推薦學(xué)弟學(xué)妹使用GUI版本
關(guān)于幫助文檔
在doc文件中的算法介紹其實(shí)是我畢業(yè)論文中的一個(gè)片段,可以幫助同學(xué)們理解pyfactor中使用的整數(shù)分解算法。
如果要深入了解某個(gè)算法,或者想要改進(jìn)算法的話,推薦同學(xué)們閱讀參考文獻(xiàn)中列出的論文。
算法介紹
pyfactor使用了如下的整數(shù)分解算法
Pollard's rho (Brent改進(jìn)方法)
Pollard's p+1
Williams p-1
ECM (橢圓曲線因子分解算法)
SIQS (二次篩法)
其中 p-1方法 和 p+1方法實(shí)現(xiàn)了原始論文的第一階段算法;
ECM方法目前還不穩(wěn)定,找到十進(jìn)制20位以下的素因子應(yīng)該沒問題;
SIQS方法尋找光滑數(shù)仍然較慢,分解50位以下的整數(shù)應(yīng)該沒問題;
使用說明
pyfactor依賴SymPy,使用前需要安裝SymPy
該工具的目標(biāo)人群是學(xué)習(xí)整數(shù)分解算法的學(xué)弟學(xué)妹,對(duì)于較大的整數(shù)運(yùn)行效率慢的話,請(qǐng)不要吐槽(逃……)
pyfactor目前提供了一個(gè)命令行(CLI)工具 —— pyfactor_cli.py,
在命令行下運(yùn)行 pyfactor_cli.py,可以使用本工具。
圖形界面(GUI)工具 —— pyfactor_gui.py使用python tkinter開發(fā),可以在界面中選擇單獨(dú)的算法。
如果想要單獨(dú)調(diào)用某個(gè)整數(shù)分解算法的話,可以直接調(diào)用pyfactor這個(gè)python包
pyfactor_cli 命令行工具
pyfactor_cli命令行工具依次使用試除法、brent方法、p+1方法、p-1方法和SIQS尋找素因子。
-h顯示幫助信息
-v顯示版本信息
--rho=nPollard's rho方法的迭代次數(shù)限制為 n 次
--pp1=BWilliams p+1方法的光滑界設(shè)置為 B
--pm1=BPollard's p-1方法的光滑界設(shè)置為 B
--ecm=dECM方法尋找的素因子大小限制為十進(jìn)制 d 位
pyfactor_cli命令行工具目前不支持單獨(dú)使用某個(gè)整數(shù)分解算法,也不進(jìn)行素性測(cè)試。
如果要單獨(dú)調(diào)用具體的分解算法,可以在python中直接導(dǎo)入相應(yīng)的包,示范如下:
from pyfactor.rho import brent # 導(dǎo)入Brent方法(Pollard rho方法的改進(jìn)版本)
from pyfactor.pm1 import pm1 # 導(dǎo)入Pollard p-1方法
from pyfactor.pp1 import pp1 # 導(dǎo)入Williams p+1方法
from pyfactor.ecm import parallel_ecm as ecm # 導(dǎo)入ECM方法
from pyfactor.siqs import siqs_main as siqs # 導(dǎo)入SIQS方法
>>> brent(2**2**5+1)
641
>>> pm1(12341234)
73
>>> pp1(123412345)
35
>>> ecm(2**2**7+1)
59649589127497217
>>> siqs(760525083515850218314740691253136455584879)
(845041919143549452517, 899985037767881262787)
前四個(gè)算法的輸出是輸入整數(shù)的一個(gè)非平凡因子,siqs的輸出是兩個(gè)非平凡因子。
具體細(xì)節(jié)可以直接看源代碼。要注意,這些算法不會(huì)對(duì)輸入?yún)?shù)進(jìn)行檢驗(yàn),因此請(qǐng)確保輸入?yún)?shù)是合數(shù)。
SIQS算法的輸入?yún)?shù)要大于等于十進(jìn)制30位。
pyfactor_gui 圖形界面工具
pyfactor_gui 是 pyfactor 的一個(gè)GUI接口,支持單獨(dú)選擇某個(gè)整數(shù)分解算法。
同時(shí),pyfactor_gui還添加了素?cái)?shù)生成與檢驗(yàn)功能。
總結(jié)
以上是生活随笔為你收集整理的python整数分节输出_pyfactor的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库 'SqlPersistenceS
- 下一篇: python 三引号_入门Python