Добрый день. Так как мой предыдущий вопрос никто не ответил (вероятно, в силу его громоздкости), то попробую его крайне четко переформулировать.
Итак, задача: своими силами (без ssl) организовать передачу шифрованных сообщений между сервером (python) и клиентом (javascript).
Проблема: у меня никак не получается заставить CryptoJS расшифровывать то, что шифрует PyCrypto. Вероятно, в силу моей криворукости от рождения .
Итак, что я уже делал:
1. Перепробовал все возможные режимы шифрования с обоих сторон. В результате пришел к выводу, что
ECB - идеальный вариант.
2. Кодировал/раскодировал результат в base64 (для переноса).
3. Неистово побагетил по поводу кратности всего и вся 16. В результате нагуглил и склепал это:
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[0:-ord(s[-1])]
4. В качестве ключа используется md5 от sha256 от пароля (т.к. просто sha256 слишком длинный чтобы быть ключом)
5. Шифруется (на стороне сервера) в данном случае рандомное число в 16 байт. Функции pad/unpad написаны на будущее (будет ли оно?)
6. В pycrypto все работает идеально (шифруется/расшифруется). А вот cryptojs упорно не хочет декодировать. Я пытался подсунуть ему и base64 строку, и просто кучу байт (предварительно сконвертированных из base64). Бесполезно. Просто и без ошибок выдает в ответ пустую строку.
И еще вопрос на засыпку. В доках к cryptojs
упоминается целая кипа схем паддинга. Но я упорно не вижу в интернете их описаний или спецификаций.
В общем если есть у кого опыт мучений с этим - поделитесь. Буду крайне благодарен.
Ответ на вопрос "А зачем тебе все это надо??" можно найти тут:
Как реализовать шифрование websocket трафика между angular-приложением и python-сервером без ssl?