V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
faketemp
V2EX  ›  问与答

pythonic 语法请教

  •  
  •   faketemp · 2020-09-28 11:58:34 +08:00 · 896 次点击
    这是一个创建于 1550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在爆破密码或者穷举的时候,经常遇到未知位数不定的情况,比如下面的案例
    未知 5 位且均为字母或数字,要求穷举出明文和 md5,可用脚本如下

    import hashlib
    
    dic = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    for i in dic:
        for j in dic:
            for k in dic:
                for m in dic:
                    for n in dic:
                        plaintext = "flag{"+i+j+k+m+n+"}"
                        md5 = hashlib.md5(plaintext.encode(encoding='UTF-8')).hexdigest()
                        if md5.startswith("5c686e3746"):
                            print("Success! Text:{} MD5:{}".format(plaintext,md5))
                            exit(0)
    

    问题:
    对于穷举 5 位就写 5 次 for 循环,未知 15 位就写 15 个 for 循环(先不考虑爆破成功的可能性)??
    而且跑出结果要十来分钟,是否有更 pythonic 或更高效的语句来优化或精简呢?

    3 条回复    2020-09-28 14:56:43 +08:00
    JeffGe
        1
    JeffGe  
       2020-09-28 12:05:26 +08:00 via Android   ❤️ 2
    itertools.product
    crella
        2
    crella  
       2020-09-28 12:59:49 +08:00 via Android   ❤️ 1
    我写了 Ruby 的,不知道怎么转成 Python 的,仅供参考思路

    http://dpaste.org/14nJ
    zxCoder
        3
    zxCoder  
       2020-09-28 14:56:43 +08:00
    dfs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5636 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:44 · PVG 14:44 · LAX 22:44 · JFK 01:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.