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
ge2009
V2EX  ›  Python

请教 AES 加密 URL 的一种不一致情况

  •  
  •   ge2009 · 2017-09-30 14:42:05 +08:00 · 3289 次点击
    这是一个创建于 2618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    key 是 3c837d501a8f49b1 原始字符串是 http://172.19.38.84/xwado/ 我用 Python 通过 AES128 加密后转 base64 的结果是:3O6CsFgm69Jg9l_I-MpEpE_FMPrDrIBFmfbOY78S0zU= 但是对方提供的正确加密后的结果是: 3O6CsFgm69Jg9l/I+MpEpHsIZ5h2dSWcZNMvAKVSCDQ

    找了一圈,如果我用普通字符串加密能和对方对得上,但一涉及到 URL 如“ http://127.0.0.1/xxxx/” 之类的就直接不一致了,请教下各位大神是什么原因?

    7 条回复    2017-10-04 21:05:19 +08:00
    Citrus
        1
    Citrus  
       2017-09-30 14:58:46 +08:00
    1. 你的 base64 结果中出现了 _ ,这是非标准 base64 字符
    2. 你给出的正确加密结果根本就不是合法的 base64 结果,连 base64 decode 都无法完成。。。
    oott123
        2
    oott123  
       2017-09-30 15:02:09 +08:00 via Android
    解密看下呗。
    yushiro
        3
    yushiro  
       2017-09-30 15:05:41 +08:00 via iPhone
    我猜测,楼主最重要的一点可能没有提,就是加密后的密文,是通过 url 传输的,你需要 urlencode。
    而且,这个 encode 不是随便拿一个就能用,你自己仔细研究一下区别吧。
    Citrus
        4
    Citrus  
       2017-09-30 15:18:16 +08:00
    由于你用的是 ECB 的加密模式,对比你们双方的密文:
    3O6CsFgm69Jg9l/I+MpEp E/FMPrDrIBFmfbOY78S0zU=
    3O6CsFgm69Jg9l/I+MpEp HsIZ5h2dSWcZNMvAKVSCDQ

    可以看出你的加密前半段是完全没有问题的,所谓的正确解密结果少了一位。也就是说,你们双方加密的明文后半段出现了差错。看看是不是什么不可见字符或者错误吧。
    按照你给出的原始字符"http://172.19.38.84/xwado/" 和 key "3c837d501a8f49b1" (均不包含引号),正确的 ECB 加密结果应该是

    3O6CsFgm69Jg9l/I+MpEpE/FMPrDrIBFmfbOY78S0zU=
    goofool
        5
    goofool  
       2017-09-30 15:44:07 +08:00
    加密模式,填充,偏移
    gamexg
        6
    gamexg  
       2017-09-30 15:46:49 +08:00
    @goofool #5 另外还有可能末尾的 \0。
    tennc
        7
    tennc  
       2017-10-04 21:05:19 +08:00
    3O6CsFgm69Jg9l/I+MpEpIQ1j0ON8Auk1KcfTNMGNmk=

    3O6CsFgm69Jg9l/I+MpEpE/FMPrDrIBFmfbOY78S0zU=

    填充方式不同,结果不同。。。

    http://tool.chacuo.net/cryptaes
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1061 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.