Не может декодировать зашифрованную строку в python из пакета сообщений (Ruby openssl)

У меня проблемы с декодированием некоторых данных, которые я получаю из сокетного соединения через пакет сообщений, и, следовательно, дешифрования их. Я получаю строку из веб-приложения Ruby on Rails в UTF-8 и использую пакет сообщений, чтобы связать все это и отправить его в службу python с помощью сокетов. Другие данные встречаются хорошо: строки, числа, массивы и т. Д. Но мой зашифрованный пароль взломан.

https://github.com/msgpack/msgpack/issues/15 этом обсуждении предлагалось заставить ascii, что я и сделал в коде rails, а также здесь, в python. Если я форсирую ascii в ruby ​​и ничего не делаю inpython, я получаю ненужную строку, но в конце у меня есть правильный незашифрованный пароль. Если я пытаюсь заставить ASCII в моем скрипте Python, я получаю ошибку декодирования

while 1:
    buf = clientsocket.recv(1024)
    unpacker.feed(buf)
    for obj in unpacker:
        print obj #works great! => ['3', [['really long url', [87987234, 'gobbledyguck of password']]]]
        #key.decrypt(obj[1][0][1][1]) roughly gives "YD3zt�(-�½ï¿½ï¿½=you suck"
        print key.decrypt(obj[1][0][1][1].decode('ascii'))

шифрование выполняется с использованием открытых / закрытых ключей (Crypto.PublicKey RSA в Python, openssl в ruby). я могу расшифровать и зашифровать хорошо в каждом скрипте (не отправляя его через сокет через пакет сообщений)

какие-нибудь мысли вообще?

РЕДАКТИРОВАТЬ:
После некоторых экспериментов и размышлений я понял, что тот факт, что пароль выходит очень хорошо, интересен. проблема заключается в лишнем мусоре в начале строки. Я просто не знаю, откуда это... или безопасно ли его урезать.

2 ответа

Решение

Решение закончилось тем, что на выходе были правильные незашифрованные данные с пухом. Несколько быстрых Google привели к тому, что я узнал, что в реализации ruby ​​openssl открытых ключей RSA по умолчанию включена поддержка PKCS#1... было трудно быстро найти хороший модуль python, поэтому быстрое и грязное решение было найдено здесь.

http://kfalck.net/2011/03/07/decoding-pkcs1-padding-in-python

который работал как шарм!

в качестве альтернативного (и, возможно, более чистого) решения http://stuvel.eu/files/python-rsa-doc/usage.html выглядел хорошо.

Глядя на рубиновый апидок, чтобы найти способ не использовать отступы, не было интуитивно понятно http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html

надеюсь, это поможет кому-то еще

Недавно у меня были проблемы с тем, что, очевидно, сеть испортила мои символы шифрования. Я попытался зашифровать шифр в base64 до отправки его по сети, и, как по волшебству, он работал отлично.

использовать:

require 'base64'

cipher = Base64.encode64(cipher)

отправить по сети

cipher = Base64.decode64(cipher)
Другие вопросы по тегам