浏览代码

2016/5v2

master
Roderic Day 4 年前
父节点
当前提交
bb543d5f71
共有 3 个文件被更改,包括 16 次插入17 次删除
  1. +1
    -0
      .gitignore
  2. +7
    -4
      toolkit.py
  3. +8
    -13
      y2016/p05.py

+ 1
- 0
.gitignore 查看文件

*.dat *.dat
*.cache
__pycache__/ __pycache__/
.DS_Store .DS_Store
venv/ venv/

+ 7
- 4
toolkit.py 查看文件

import collections import collections
import itertools
import os import os
import re import re
import subprocess import subprocess
Path(path).write_bytes(response.content) Path(path).write_bytes(response.content)




def md5(strings):
cmd = ['md5'] + [c for s in strings for c in ['-s', s]]
out = subprocess.check_output(cmd).decode()
return re.findall(r'"(.+)"\) = (.+)', out)
def md5gen(template, pattern=r'.+', batch=6000):
for i in itertools.count():
strings = (template.format(i=i * batch + k) for k in range(batch))
args = [c for s in strings for c in ['-s', s]]
out = subprocess.check_output(['md5'] + args).decode()
yield from re.findall(rf'"(.+)"\) = ({pattern})', out)

+ 8
- 13
y2016/p05.py 查看文件

import itertools
import sys import sys


import toolkit import toolkit




text = sys.stdin.read().strip() text = sys.stdin.read().strip()
password1 = []
password1 = ['_' for _ in range(8)]
password2 = ['_' for _ in range(8)] password2 = ['_' for _ in range(8)]
for i in itertools.count():
strings = [f'{text}{1000 * i + k}' for k in range(1000)]
for string, digest in toolkit.md5(strings):
if digest.startswith('00000'):
print(string, digest)
password1.append(digest[5])
if digest[5] in '01234567' and password2[int(digest[5])] == '_':
password2[int(digest[5])] = digest[6]
if len(password1) >= 8 and '_' not in password2:
for string, digest in toolkit.md5gen(f'{text}{{i}}', pattern=r'00000.+'):
if '_' in password1:
password1[password1.index('_')] = digest[5]
if digest[5] in '01234567' and password2[int(digest[5])] == '_':
password2[int(digest[5])] = digest[6]
print(digest, string, ''.join(password1), ''.join(password2))
if '_' not in password1 + password2:
break break
print(''.join(password1[:8]))
print(''.join(password2[:8]))

正在加载...
取消
保存