[Level 26]

Title: be a man - apologize!
Hurry up, I'm missing the boat
源碼中有一提示:you've got his e-mail,指的是[Level 19]中的leopold.moz@pythonchallenge.com。但沒(méi)想出來(lái)有什么用。
這個(gè)郵件存在,需要我們以sorry或apology(或其他?)為主題發(fā)個(gè)郵件過(guò)去。郵件回復(fù):
Never mind that.
Have you found my broken zip?
md5: bbb8b499a0eef99b52c7f13f4e78c24b
Can you believe what one mistake can lead to?
一個(gè)錯(cuò)誤,什么錯(cuò)誤?缺少了一個(gè)字節(jié),窮舉驗(yàn)證:
import hashlib
data = open('mybroken.zip','rb').read()
for i in range(len(data)):
for j in range(256):
new = data[:i]+bytes([j])+data[i+1:]
if hashlib.md5(new).hexdigest()=='bbb8b499a0eef99b52c7f13f4e78c24b':
open('repaired.zip','wb').write(new)
exit()
打開(kāi)修復(fù)的壓縮包里的圖片,顯示speed,但 speed.html 不存在。網(wǎng)頁(yè)中的提示派上用場(chǎng)了,speedboat才對(duì),[Level 27]
小結(jié)
- [
hash.hexdigest()] [1]返回16進(jìn)制摘要。
[1]: https://docs.python.org/3/library/hashlib.html#hashlib.hash.hexdigest
或許還應(yīng)注意到:
bytes(iterable_of_ints) -> bytes
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
Python Challenge Wiki
Pythonic 的方式發(fā)送郵件:
import email.message, smtplib
apology = email.message.Message()
apology.add_header('To', 'leopold.moz@pythonchallenge.com')
apology.add_header('From', from_addr)
apology.add_header('Subject', 'Apology')
apology.set_payload('Sorry!')
server = smtplib.SMTP_SSL('smtp.gmail.com')
server.login(from_addr, pw)
server.sendmail(apology['from'], apology['to'], apology.as_string())
server.quit()