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

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

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

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

 #coding:utf-8
import re
from Crypto.Hash import SHA
import hashlib
import itertools
import datetime
starttime = datetime.datetime.now()
hash1="67ae1a64661ac8b4494666f58c4822408dd0a3e4"
str1="QqWw%58(=0Ii*+nN"
str2=[['Q', 'q'],[ 'W', 'w'],[ '%', ''], ['', '('],[ '=', ''], ['I', 'i'], ['*', '+'], ['n', 'N']]
def sha_encrypt(str):
sha = hashlib.sha1(str)
encrypts = sha.hexdigest()
return encrypts
st3=""*8
str4=""
str3=list(st3)
for a in range(0,2):
str3[0]=str2[0][a]
for b in range(0,2):
str3[1]=str2[1][b]
for c in range(0,2):
str3[2]=str2[2][c]
for d in range(0,2):
str3[3] = str2[3][d]
for e in range(0,2):
str3[4] = str2[4][e]
for f in range(0,2):
str3[5] = str2[5][f]
for g in range(0,2):
str3[6] = str2[6][g]
for h in range(0,2):
str3[7] = str2[7][h]
newS="".join(str3)
for i in itertools.permutations(newS, 8):
str4 = sha_encrypt("".join(i))
if str4==hash1:
print "".join(i)
endtime = datetime.datetime.now()
print (endtime - starttime).seconds
exit(0)

最新文章

  1. RN 项目导入WebStorm 组件没有依赖
  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列
  3. ceph network introduce
  4. Android开源框架ImageLoader的完美例子
  5. HTML基础和表格
  6. Android 学习手札(三) 视图(View)
  7. java——推断日期是否在今天之前
  8. TS和C#的差异
  9. IDEA VM设置
  10. T-SQL应用实例
  11. apache不能启动LoadModule php5_module modules/ph
  12. Android之内存泄露、内存溢出、内存抖动分析
  13. java thread dump日志分析
  14. JavaScript------去掉Array中重复值
  15. 【WPF】设置Listview样式
  16. 简单模仿拉钩网上的“hot_info”
  17. PCB封装技术
  18. Yii 2.x 和1.x区别以及yii2.0安装
  19. vue跳转页面传值怎么传?
  20. openssl C语言编码实现rsa加密

热门文章

  1. EasyDSS RTMP流媒体解决方案之Windows服务安装方案
  2. 更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求
  3. Mybatis之入门Helloworld程序
  4. 九度OJ 1034:寻找大富翁 (排序)
  5. json 数据返回解密
  6. 一文读懂实用拜占庭容错(PBFT)算法
  7. 利用wxpython显示OpenCV图像
  8. PAT 甲级 1007. Maximum Subsequence Sum (25) 【最大子串和】
  9. Android开发学习之三——第一个Android程序
  10. POJ2443 Set Operation —— bitset