Python Challenge[18]

[Level 18]

Python Challenge[18]_第1张图片

Title: can you tell the difference?

除标题之外的提示,源码中注释处有一段信息it is more obvious that what you might think。那么图中左右有什么不同呢?最明显的是左边的亮一点,右边的暗一点。一开始尝试暗的各个单词都不行。换个思路,那么亮呢?light不行,bright可以,搞定。

出来的网页显示ness,百度翻译有海岬,海角的意思,Google翻译是后缀。海角?图片中有海,但是想不出。那么后缀呢?brightness,刚好是bright的名词形式,试下,有了,出来的网页源码中注释maybe consider deltas.gz。替换brightness.html为deltas.gz,下载到该压缩文件。

文件打开看了下,内容像是一堆16进制数字,整体上分为左右两边。是要转为字符串还是图片?字符串太多,应该不是,那么怎么转图片?

整体直接转图片不行,分成两部分转也不行,搜索了下,忘记了标题中tell the difference这茬了。需要使用difflib库。

import difflib
d1, d2 = [], []
with open('delta.txt') as delta:
  for line in delta:
    d1.append(line[:53]+'\n')
    d2.append(line[56:])
compare = difflib.Differ().compare(d1, d2)

打印迭代器中的内容,结果分为三类:以'- ''+ '' '开头的字符串。分别装箱:

with open("f.png","wb") as f,open("f1.png","wb") as f1,open("f2.png","wb") as f2:
  for line in compare:
    bs = bytes([int(i, 16) for i in line[2:].strip().split(" ") if i])
    if line[0] == '+':
      f1.write(bs)
    elif line[0] == '-':
      f2.write(bs)
    else:
      f.write(bs)

得到的三张图片分别显示../hex/bin.htmlbutterfly。那么,[Level 19],butter和fly分别是用户名和密码。

小结

  1. 压缩文件何以这样读取
import gzip
data = gzip.open('deltas.gz')
  1. compare(a, b)比较两个序列的行,并生成增量(行序列)。difflib.Differ类用于比较文本行的序列,并产生人类可读的差异或增量。

Python Challenge Wiki

difflib.ndiff?没尝试。列表解析?可以试着写出来。

More

你可能感兴趣的:(Python Challenge[18])