Python Flag 解密挑战:利用哈希和 Base64 解密 Flag

本篇文章将带你一步步解密一个 Python 编写的 Flag 挑战,涵盖 Base64 解码、哈希算法验证、字符组合等关键技巧。你将学习如何通过代码分析和逻辑推理,最终解开隐藏的 Flag。

题目描述:

请解出 Flag

代码:

import base64
import hashlib
import sys

def abort():
    print('Wrong flag!')
    sys.exit(1)
print('Please input the flag:')
flag = input()
#res=['N','e','e','p','u','{','P','u','t',10,'0','s','N','9','S',16,'a','_',19,20,21,22,'_',24,25,'_','k','u','}']
if len(flag) != 29:
    abort()
if flag[:5] != 'Neepu':
    abort()
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
if flag[28:] != '}':
    abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==':
    abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':
    abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
    abort()
if hashlib.md5(flag[9:3:-2].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
    abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
    abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
    abort()

print('You are right!')

题解:

首先,我们来看一下条件:

  • flag 长度为 29 且以 'Neepu' 开头,以 '}' 结尾
  • flag[16] 为 'a',flag[17] 为 '_', flag[22] 等于 flag[17]
  • flag 的最后 4 位经过 base64 编码后的结果为 'X2t1fQ=='
  • flag 的倒数第 3 到第 15 位每隔 3 位组成的字符串经过 ASCII 码转换后为 'u1lt_'
  • flag[11:15] 的 ASCII 码分别为 110、9、500、490、115
  • flag[3:9] 经过 MD5 哈希后的结果为 'db46a959e0f94c0a8977411ab69df11a'
  • flag[6]+flag[8]+flag[10] 经过 SHA1 哈希后的结果为 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d'
  • flag 经过 SHA256 哈希后的结果为 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'

那么,接下来我们就来一一验证这些条件:

  • 长度验证
if len(flag) != 29:
    abort()
  • 以 'Neepu' 开头
if flag[:5] != 'Neepu':
    abort()
  • flag[16] 为 'a',flag[17] 为 '_', flag[22] 等于 flag[17]
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
  • 以 '}' 结尾
if flag[28:] != '}':
    abort()
  • 最后 4 位经过 base64 编码后的结果为 'X2t1fQ=='
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==':
    abort()
  • flag 的倒数第 3 到第 15 位每隔 3 位组成的字符串经过 ASCII 码转换后为 'u1lt_'
if flag[-2:-15:-3].encode().hex() != '75316c745f':
    abort()
  • flag[11:15] 的 ASCII 码分别为 110、9、500、490、115
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
    abort()
  • flag[3:9] 经过 MD5 哈希后的结果为 'db46a959e0f94c0a8977411ab69df11a'
if hashlib.md5(flag[3:9].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
    abort()
  • flag[6]+flag[8]+flag[10] 经过 SHA1 哈希后的结果为 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d'
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
    abort()
  • flag 经过 SHA256 哈希后的结果为 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
    abort()

最终的 flag 为:

Neepu{Put0sN9S_a_26__ku}

完整代码如下:

import base64
import hashlib
import sys

def abort():
    print('Wrong flag!')
    sys.exit(1)
print('Please input the flag:')
flag = input()
#res=['N','e','e','p','u','{','P','u','t',10,'0','s','N','9','S',16,'a','_',19,20,21,22,'_',24,25,'_','k','u','}']
if len(flag) != 29:
    abort()
if flag[:5] != 'Neepu':
    abort()
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
if flag[28:] != '}':
    abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==':
    abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':
    abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
    abort()
if hashlib.md5(flag[3:9].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
    abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
    abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
    abort()

print('You are right!')
Python Flag 解密挑战:利用哈希和 Base64 解密 Flag

原文地址: https://www.cveoy.top/t/topic/obLt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录