V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Lucius
V2EX  ›  Python

一段Python解密题

  •  
  •   Lucius · 2013-06-20 23:58:30 +08:00 · 3158 次点击
    这是一个创建于 4168 天前的主题,其中的信息可能已经有所发展或是发生改变。
    def squarer(value, key):
    if len(value) % 2 == 0:
    p = int(round(len(value)) / 2.0)
    value = reversed(value[-p:]) + reversed(value[:p])
    k = 0
    result = ''
    for v in value:
    if ord(v) ^ ord(key[k]) < 32 | ord(v) ^ ord(key[k]) > 126 | ord(v) < 0 | ord(v) > 255:
    result += v
    else:
    result += chr(ord(v) ^ ord(key[k]))
    k = 0 if k == len(key) else k + 1
    return result

    print(squarer('ma=cjy', '???'))

    输出结果是xamyjc

    求 ???
    第 1 条附言  ·  2013-06-21 00:41:04 +08:00
    7 条回复    1970-01-01 08:00:00 +08:00
    jackyzy823
        1
    jackyzy823  
       2013-06-21 00:23:07 +08:00
    v2ex code的排版不忍直视。。。。
    TankyWoo
        2
    TankyWoo  
       2013-06-21 07:37:25 +08:00
    我记得v2ex好像可以嵌套gist,楼主可以试试,或者贴在gist/pastebin/pastie/codepad上然后给个链接吧,Python没缩进不忍直视啊。。。
    y0
        3
    y0  
       2013-06-21 07:53:41 +08:00
    reversed 返回的是 iterator, 怎么加啊。这程序放 python 里会报错。
    y0
        4
    y0  
       2013-06-21 08:08:25 +08:00
    k 是一个循环的变量,但这段代码会出现 string index out of range.

    比如 len(key) = 3, 到第四步 k = 3, key[3] 已经 out of range 了,在 for loop 的末尾才能更新成 0. 除非你想说这表示 key 至少有 6 位...
    Mutoo
        5
    Mutoo  
       2013-06-21 09:59:24 +08:00
    光靠这一组数据,没办法推出真正的key,注意第二位的 a 经过转换后,仍为 a
    说明 ord(v)^ord(key[k]) < 32 或 ord(v)^ord(key[k]) > 126 且此时 k = 1
    k[1]的解有 2^5 + 1 + 2^7 种

    不像 k[0] 可以明确算出来是21

    m 109 01101101
    x 120 01111000

    01101101
    00010101 21 k[0]
    01111000
    efi
        6
    efi  
       2013-06-21 12:12:38 +08:00
    @y0 k = 0 if k == len(key) else k + 1
    k只有超界之后才可能归0,在此之前已经IndexError掉了,洗洗睡吧
    y0
        7
    y0  
       2013-06-21 18:13:09 +08:00
    @efi 我说的和你说的是一个意思啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   907 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:49 · PVG 04:49 · LAX 12:49 · JFK 15:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.