Как заставить CryptoJS расшифровывать то, что шифрует PyCrypto?

Добрый день. Так как мой предыдущий вопрос никто не ответил (вероятно, в силу его громоздкости), то попробую его крайне четко переформулировать.

Итак, задача: своими силами (без 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?
  • Вопрос задан
  • 4128 просмотров
Пригласить эксперта
Ответы на вопрос 1
maxaon
@maxaon
Попробуйте привести зашифрованные сообщения к общему знаменателю. Восползуйтесь консольной улилитой из пакета OpenSSL для создания опорного зашифрованного сообщения. Далее зашифруйте текст с помощью CryptoJS и PyCrypto так, чтобы получился результат из OpenSSL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы