代码之家  ›  专栏  ›  技术社区  ›  Laurent LAPORTE

为什么**此**模块包含加密字符串?[复制品]

  •  -3
  • Laurent LAPORTE  · 技术社区  · 6 年前

    如果您打开一个python解释器,并键入“import this”,如您所知,它将打印:

    提姆·彼得斯的《蟒蛇禅》

    美胜于丑。
    显式比隐式好。
    简单胜于复杂。
    复杂胜于复杂。
    平的比嵌套的好。
    稀胜于密。
    可读性很重要。
    特殊情况不足以打破规则。
    尽管实用胜过纯粹。
    错误不应该悄无声息地过去。
    除非明确沉默。
    面对模棱两可,拒绝猜测的诱惑。
    应该有一个——最好只有一个——显而易见的方法。
    不过,除非你是荷兰人,否则这种方式一开始可能并不明显。
    现在总比没有好。
    尽管从来没有比 正确的 现在。
    如果实现很难解释,那是个坏主意。
    如果实现很容易解释,这可能是一个好主意。
    名称空间是一个非常棒的主意——让我们做更多的事情吧!

    在python源代码(lib/this.py)中,此文本是由一段奇怪的代码生成的:

    s = """Gur Mra bs Clguba, ol Gvz Crgref
    
    Ornhgvshy vf orggre guna htyl.
    Rkcyvpvg vf orggre guna vzcyvpvg.
    Fvzcyr vf orggre guna pbzcyrk.
    Pbzcyrk vf orggre guna pbzcyvpngrq.
    Syng vf orggre guna arfgrq.
    Fcnefr vf orggre guna qrafr.
    Ernqnovyvgl pbhagf.
    Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
    Nygubhtu cenpgvpnyvgl orngf chevgl.
    Reebef fubhyq arire cnff fvyragyl.
    Hayrff rkcyvpvgyl fvyraprq.
    Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
    Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
    Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
    Abj vf orggre guna arire.
    Nygubhtu arire vf bsgra orggre guna *evtug* abj.
    Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
    Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
    Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
    
    d = {}
    for c in (65, 97):
        for i in range(26):
            d[chr(i+c)] = chr((i+13) % 26 + c)
    
    print "".join([d.get(c, c) for c in s])
    
    0 回复  |  直到 8 年前
        1
  •  160
  •   Eli Bendersky    13 年前

    这叫做 rot13 编码:

    d = {}
    for c in (65, 97):
        for i in range(26):
            d[chr(i+c)] = chr((i+13) % 26 + c)
    

    为大写字符(这是65的用途)和小写字符(这是97的用途)构建转换表。

    print "".join([d.get(c, c) for c in s])
    

    打印翻译的字符串。

        2
  •  23
  •   ypercubeᵀᴹ    13 年前

    如果你想 小精灵 你可以用手或者在脑子里进行替换,因为13*2=26(英文字母表中的字母数),它本质上是一种交换:

    a <-> n
    b <-> o
    c <-> p
    ...
    m <-> z
    
    A <-> N
    B <-> O
    C <-> P
    ...
    M <-> Z 
    

    与LBH Cenpgvfvr Ybat Rabhtu,LBH'yy Riraghnyyl Znfgre GUR MRA BS EBG-13 Nytbevguz Naq Ernq Guvf Xyvatba Ybbxvat Grgf Jvgubhg PBzchgre Uryc相比。

        3
  •  9
  •   Michael J. Barber    13 年前

    这是一个替换密码, rot13 .

        4
  •  7
  •   bastelflp Zakir    7 年前

    这是一个替换密码(如前面的答案所述)。从历史上讲, Caesar cipher .

    https://www.google.de/search?q=caesar+cipher&cad=h

        5
  •  6
  •   Filip Å trapwalker    6 年前

    它使用 ROT13 编码。这是用来开玩笑的。

    还可以使用python函数对字符串进行解码。

    仅限Python 2:

    import this
    print(this.s.decode('rot13'))
    

    巨蟒2&3:

    import codecs
    print(codecs.decode(this.s, 'rot-13'))