zoukankan      html  css  js  c++  java
  • yafu安装使用方法以及mismatched parens解决方法

    yafu用于自动整数因式分解,在RSA中,当p、q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p、q值,原理是使用Fermat方法与Pollard rho方法等。

    再摘录官方的一段简介(又懒得翻译了)。

    YAFU (with assistance from other free software) uses the most powerful modern algorithms (and implementations of them) to factor input integers in a completely automated way. The automation within YAFU is state-of-the-art, combining factorization algorithms in an intelligent and adaptive methodology that minimizes the time to find the factors of arbitrary input integers. Most algorithm implementations are multi-threaded, allowing YAFU to fully utilize multi- or many-core processors (including SNFS, GNFS, SIQS, and ECM).
    
    YAFU is primarily a command-line driven tool. You provide the number to factor and, via screen output and log files, YAFU will provide you the factors. There is also an interactive environment similar to MATLAB or PARI/GP, where you can type commands and store results. YAFU is very customizable, through the optional use of many many command line parameters and a very capable expression interpreter.

    -------------------------------------------------

    1. windows安装

    https://sourceforge.net/projects/yafu/

    现在最新版本是1.34版本,下载后解压即可。

    解压后有yafu-Win32.exe和yafu-x64.exe,推荐使用64位的。

    2. linux安装

    上面压缩包里有一个yafu的elf文件,可以在一些linux上运行,由于是静态编译的,在一些系统上想要使用yafu就得重新编译。

    3. linux编译安装

    参考了sherlly的文章,然后测试、整合成脚本。

    apt-get update
    apt-get install gcc m4 zlib1g-dev make -y
    
    mkdir -p $HOME/src
    
    # install gmp
    cd $HOME/src
    v=6.1.2
    wget https://gmplib.org/download/gmp/gmp-${v}.tar.bz2
    tar -jxvf gmp-${v}.tar.bz2 && mv gmp-${v} gmp && cd gmp
    ./configure
    make && make check && make install
    
    # install gmp-ecm
    cd $HOME/src
    v=6.2
    wget https://gforge.inria.fr/frs/download.php/file/4663/ecm-${v}.tar.gz
    tar zxvf ecm-${v}.tar.gz && mv ecm-${v} gmp-ecm && cd gmp-ecm
    # replace __GMP_BITS_PER_MP_LIMB with GMP_LIMB_BITS
    x='__GMP_BITS_PER_MP_LIMB';y='GMP_LIMB_BITS';sed -i "s#${x}#${y}#g" `grep ${x} -rl .`
    ./configure --with-gmp=/usr/local
    make && make install
    
    # install msieve
    cd $HOME/src
    v1=1.53
    v2=153
    # https://sourceforge.net/projects/msieve/files/latest/download
    # wget http://downloads.sourceforge.net/project/msieve/msieve/Msieve%20v${v1}/msieve${v2}.tar.gz
    wget https://netix.dl.sourceforge.net/project/msieve/msieve/Msieve%20v${v1}/msieve${v2}_src.tar.gz
    tar zxvf msieve${v2}.tar.gz && mv msieve-${v1} msieve && cd msieve
    make all
    
    # install yafu
    cd $HOME/src
    git clone https://github.com/DarkenCode/yafu
    cd yafu
    # modify Makefile
    sed -i 's#INC = -I. -Iinclude#& -Itop/aprcl#;s#gmp/include#gmp#g;s#gmp/lib/linux/x86_64#gmp/.libs#;
    s#gmp-ecm/include/linux#gmp-ecm#g;s#gmp-ecm/lib/linux/x86_64#gmp-ecm/.libs#;
    s#msieve/lib/linux/x86_64#msieve#;122i LIBS+= -lc -lz' Makefile
    # comment
    sed -i 's#printf("setting prime roots#//&#g;s#printf("medsieve#//&#g;s#printf("lpsieve#//&#g;
    s#printf("scan p#//&#g;s#printf("next B#//&#g;s#printf("next roots#//&#g' factor/qs/SIQS.c
    make x86_64 NFS=1

    4. yafu使用方法

    使用cmd进入yafu的解压目录(为了方便的话,自己可以把该目录加入到环境变量。)

    输入yafu-x64进入命令行

    最常用的命令是factor(n),将n值分解

    如分解23333333333333

    factor(23333333333333)

    很快得到:

    fac: factoring 23333333333333
    fac: using pretesting plan: normal
    fac: no tune info: using qs/gnfs crossover of 95 digits
    div: primes less than 10000
    fmt: 1000000 iterations
    Total factoring time = 0.2805 seconds
    
    
    ***factors found***
    
    P2 = 31
    P12 = 752688172043
    
    ans = 1

    5. 使用yafu的时候遇到mismatched parens

    这是因为在命令行里不支持过长的位数,所以我们只要把n的值从文件中去读取即可。

    查看yafu的帮助:

    yafu-x64.exe help

    新建一个文件pcat.txt,内容里写上n的值,如:

    966808932627497190635859236054960349099463975227350564265384373280336699853387254070662881265937565163000758606154308757944030571837175048514574473061401566330836334647176655282619268592560172726526643074499534129878217409046045533656897050117438496357231575999185527675071002803951800635220029015932007465117818739948903750200830856115668691007706836952244842719419452946259275251773298338162389930518838272704908887016474007051397194588396039111216708866214614779627566959335170676055025850932631053641576566165694121420546081043285806783239296799795655191121966377590175780618944910532816988143056757054052679968538901460893571204904394975714081055455240523895653305315517745729334114549756695334171142876080477105070409544777981602152762154610738540163796164295222810243309051503090866674634440359226192530724635477051576515179864461174911975667162597286769079380660782647952944808596310476973939156187472076952935728249061137481887589103973591082872988641958270285169650803792395556363304056290077801453980822097583574309682935697260204862756923865556397686696854239564541407185709940107806536773160263764483443859425726953142964148216209968437587044617613518058779287167853349364533716458676066734216877566181514607693882375533

    注意:最后面一定要换行,不然会出现eof; done processing batchfile

    然后运行命令为

    yafu-x64 "factor(@)" -batchfile pcat.txt

    很快得到:

    ***factors found***
    
    PRP617 = 31093551302922880999883020803665536616272147022877428745314830867519351013248914244880101094365815998050115415308439610066700139164376274980650005150267949853671653233491784289493988946869396093730966325659249796545878080119206283512342980854475734097108975670778836003822789405498941374798016753689377992355122774401780930185598458240894362246194248623911382284169677595864501475308194644140602272961699230282993020507668939980205079239221924230430230318076991507619960330144745307022538024878444458717587446601559546292026245318907293584609320115374632235270795633933755350928537598242214216674496409625928997877221
    PRP617 = 31093551302922880999883020803665536616272147022877428745314830867519351013248914244880101094365815998050115415308439610066700139164376274980650005150267949853671653233491784289493988946869396093730966325659249796545878080119206283512342980854475734097108975670778836003822789405498941374798016753689377992355122774401780930185598458240894362246194248623911382284169677595864501475308194644140602272961699230282993020507668939980205079239221924230430230318076991507619960330144745307022538024878444458717587446601559546292026245318907293584609320115374632235270795633933755350928537598242214216674496409625928797450473
    
    ans = 1

    注意:运行后,pcat.txt就会消失了。

  • 相关阅读:
    使用offerShow小程序查询程序员薪水
    StoryBoard中使用segue传值
    在Xcode11中添加launchImage
    OC之打乱对象数组
    HDU Today
    洛谷:P1048 采药
    洛谷:P1928 外星密码
    洛谷:P1757 通天之分组背包
    洛谷:P1115 最大子段和
    洛谷:P1104 生日
  • 原文地址:https://www.cnblogs.com/pcat/p/7508205.html
Copyright © 2011-2022 走看看