メッセージパックを介してソケット接続から取得した一部のデータのエンコードを解除し、結果として暗号化を解除するのに問題があります。UTF-8 で Ruby on Rails Web アプリケーションから文字列を取得し、メッセージパックを使用してすべてをバンドルし、ソケットを使用して Python サービスに送信します。文字列、数値、配列など、他のデータは正常に表示されます。しかし、暗号化されたパスワードは壊れています。
https://github.com/msgpack/msgpack/issues/15このディスカッションでは、Rails コードと Python で行った ascii の強制が提案されました。RubyでASCIIを強制し、Pythonで何もしないと、文字列にジャンクが表示されますが、暗号化されていない正しいパスワードが最後にあります。Python スクリプトで ascii を強制しようとすると、デコード エラーが発生します
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'))
暗号化は、公開/秘密鍵 (Python では Crypto.PublicKey RSA、Ruby では openssl) を使用して行われます。各スクリプト内で問題なく復号化および暗号化できます(メッセージパックを介してソケット経由で送信しません)
何か考えはありますか?
編集:
いくつかの実験と少しの考えの後、パスワードが問題なく出力されるという事実が興味深いことに気付きました。問題は、文字列の先頭にある余分なジャンクです。それがどこから来たのか、または切り捨てても安全かどうかはわかりません。