python challenge 26解题总结

python challenge 26网址:www.pythonchallenge.com/pc/hex/decent.html(需要用户名和密码的话,用户名为butter,密码为fly),查看网页源代码以及图片会发现:

# be a man - apologize!
# 图中是抓耳挠腮的猴子,下面有句话 Hurry up, I'm missing the boat
# 网页注释中有 <!-- you've got his e-mail -->
# 联想到前面第19关解一个邮件里面的音频文件,当时没有记那个email地址
# 回去找,是 leopold.moz@pythonchallenge.com
# 发封邮件到这个地址,既然要道歉,就说sorry吧
# 得到如下输出
# 发件人    Leopold Mozart <leopold.moz@pythonchallenge.com>
# 发送至    keep.studying.everyday@gmail.com
# 日期    2010年1月5日 下午11:58
# 主题    Re: my broken zip Re: sorry
# 邮送域    mail-yw0-f121.google.com
#
# Never mind that.
#
# Have you found my broken zip?
#
# md5: bbb8b499a0eef99b52c7f13f4e78c24b
#
# Can you believe what one mistake can lead to?

# 这让我想到第24关的那个mybroken.zip
# 看来要想办法根据md5修复这个zip文件
# 用winrar修复失败
# 又没有思路了。。。
# 看攻略的解法:
# 信中的最后一句意思是你能相信错了一个字节就会出现这个吗?暗示你那个zip文件有一个字节错了。
# 所以修复方法是,枚举每个字节的所有可能值,然后算md5,直到与已知的正确md5值相同为止。
# 从修复好的zip文件里打开gif文件,里面显示 speed  ==> http://www.pythonchallenge.com/pc/hex/speed.html
# 地址不对
# 猜吧,发现正确的是speedboat ==> http://www.pythonchallenge.com/pc/hex/speedboat.html

源代码如下:

def level_26():
  data=open(ur'd:mybroken.zip','rb').read()
  for i in range(len(data)):
    for c in range(256):
      newdata=data[:i]+chr(c)+data[i+1:]
      if hashlib.md5(newdata).hexdigest()=='bbb8b499a0eef99b52c7f13f4e78c24b':
        open(ur'd:mybroken_repaired.zip','wb').write(newdata) # 修复好的文件打开里面的mybroken.gif, 图中显示 speed
        print 'repaired.'
        return

下一关网址:www.pythonchallenge.com/pc/hex/speedboat.html(用户名:butter,密码:fly)