Я пишу этот вопрос + ответ, потому что я много боролся (возможно, из-за отсутствия опыта), заблудился разными способами шифрования/дешифрования с помощью node или python.
Я думал, что мое дело может помочь людям в будущем.
Что мне нужно сделать:
- Получить данные из формы, зашифровать их с помощью Crypto (node -js)
- Передайте зашифрованные данные в Python и расшифруйте его с помощью PyCrypto.
Я решил использовать шифрование AES.
Вот как я начал (я не буду проходить все, что я пробовал):
-
Я последовал примеру в конце этой страницы
Который дал в моем случае:
(это может быть очень плохое сочетание между javascript и coffeescript)
crypto = require "crypto" [...] key = "mykeywhatever" cipher = crypto.createCipher('aes192', key) cipher.update('string i want to encode', 'binary', 'hex') encoded_string = cipher.final('hex') [...]
Это сработало очень хорошо, чтобы закодировать мою строку.
-
Затем я написал свой python script, чтобы расшифровать эту строку, используя readme на странице PyCrypto github:
from Crypto.Cipher import AES [...] my_string = data_coming_from_rabbitmq obj = AES.new('mykeywhatever', AES.MODE_CBC) obj.decrypt(ciphertext) [...]
Это явно не сработало: в readme есть IV, но так как я не дал один в node script, почему я должен дать один в python один?
После того, как я узнал, что node Crypto использует OpenSSL, в то время как PyCrypto, по-видимому, этого не делает. Поэтому я просмотрел и нашел эти страницы:
- Как я могу расшифровать что-то с PyCrypto, который был зашифрован с помощью OpenSSL?
- Является ли AES одинаковым в библиотеках PyCrypto и Node.JS Crypto
- и многое другое...
Итак, все усложнилось, никто не делает то же самое для дешифрования данных, я потерялся и попросил о помощи.
Ответ заключается в том, с кем я с коллегой (ну, в основном, моим кордером).