zoukankan      html  css  js  c++  java
  • [MTC3]Cracking SHA1-Hashed Passwords

    题目地址:https://www.mysterytwisterc3.org/en/challenges/level-ii/cracking-sha1-hashed-passwords

    解题关键:根据键盘上的按键分布,可以看出右边的数字键只有2486,很有可能是当做上下左右的功能,然后对剩余的按照每个按键出现1次进行暴力,发现能得出解。(刚开始学python,dfs都不知道怎么return,噗)

    复杂度:$O({2^n}n!)$

    由于需要在10s之内求解,而python遍历全部密钥空间需要15s,而根据遍历的姿势,我们只要选出使最外层的循环正确的字母,就可以缩短一半的时间,因此若求解时间不符合要求,将最外层的求解顺序变换一下即可。

     1 #coding:utf-8
     2 import re
     3 from Crypto.Hash import SHA
     4 import hashlib
     5 import itertools
     6 import datetime
     7 starttime = datetime.datetime.now()
     8 hash1="67ae1a64661ac8b4494666f58c4822408dd0a3e4"
     9 str1="QqWw%58(=0Ii*+nN"
    10 str2=[['Q', 'q'],[ 'W', 'w'],[ '%', '5'], ['8', '('],[ '=', '0'], ['I', 'i'], ['*', '+'], ['n', 'N']]
    11 def sha_encrypt(str):
    12     sha = hashlib.sha1(str)
    13     encrypts = sha.hexdigest()
    14     return encrypts
    15 st3="0"*8
    16 str4=""
    17 str3=list(st3)
    18 for a in range(0,2):
    19     str3[0]=str2[0][a]
    20     for b in range(0,2):
    21         str3[1]=str2[1][b]
    22         for c in range(0,2):
    23             str3[2]=str2[2][c]
    24             for d in range(0,2):
    25                 str3[3] = str2[3][d]
    26                 for e in range(0,2):
    27                     str3[4] = str2[4][e]
    28                     for f in range(0,2):
    29                         str3[5] = str2[5][f]
    30                         for g in range(0,2):
    31                             str3[6] = str2[6][g]
    32                             for h in range(0,2):
    33                                 str3[7] = str2[7][h]
    34                                 newS="".join(str3)
    35                                 for i in itertools.permutations(newS, 8):
    36                                     str4 = sha_encrypt("".join(i))
    37                                     if str4==hash1:
    38                                         print "".join(i)
    39                                         endtime = datetime.datetime.now()
    40                                         print (endtime - starttime).seconds
    41                                         exit(0)
  • 相关阅读:
    EBS_FORM_开发:关于离开record验证
    EBS_FORM_开发:关于WHEN-VALIDATE-ITEM上面commit
    EBS_FORM_开发:关于LOCK-ON
    EBS_FORM_开发:实现form record ctrl+F6复制
    EBS_FORM_开发:关于切换不同BLOCK的时候弹出需要保存的窗口
    EBS_FORM_开发:FRM-40150的解决思路
    工作记录
    02_mysql表的操作
    Mysql_字符集_排序规则
    JAVA_IO
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7669786.html
Copyright © 2011-2022 走看看