2017-08-17 19 views
-2

こんにちは私はPythonで(cryptography.fernetを使用して)ソケットを介して送信されたデータを暗号化しようとしていますが、コードを実行してデータを送り返すときはいつでも、cryptography.fernet.invalidtokenサーバーの終わり。私はローカルで同じ鍵でトークンを解読することができるので、それはソケットでなければならないと思います。私が使用しているコードは次のとおりです。無効なfernetトークン

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
print colored("listening...","red") 
s.listen(10) 
conn,addr = s.accept() 
print colored("connected!","red") 
data = conn.recv(1024) 
print data 
+2

あなたが見ている例外を提供するのに役立つかもしれません – AK47

+1

暗号例外に関する質問は、関連コードの正確な* none *を示しています。私は驚いて頭を振るだけ... –

答えて

-1

申し訳ありませんが、私は暗号化機能または例外を教えていません。私は急いでこれを取得していました。とにかく、私は解決策を見つけました。 conn.recv()で定義されているバッファが小さすぎて、受信したトークンが切り捨てられていたという問題がありました。バッファサイズを元の1024より大きい値に増やすことで問題が解決されました。

+1

あなたが説明したことは、データを読む不正確で壊れやすい方法です。 n個以上のバイトを送信したとしても、 'conn.recv(n)'がnバイトのデータを読み込むという保証はありません。代わりに、あなたがメッセージの終わりを検出するまで(おそらくEOFを検出することによって)、利用可能なものを読むためのループが必要です。 –

+0

良い点。私はそれを組み込む必要があります。 – sosig

関連する問題