Python Challenge[18]

作者: Recgat | 来源:发表于2017-02-14 11:50 被阅读0次

    [Level 18]


    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]

        本文链接:https://www.haomeiwen.com/subject/hvgzittx.html