2017-07-27 4 views
0

私はサーバーからファイルをダウンロードするSOAPクライアントを持っています。要求には本体と添付ファイル(ファイル)が2つの別個のキーを使用して暗号化されています。両方のキーはそれぞれの<xenc:EncryptedKey>タグに含まれています。私は体の鍵を使って問題を解読することができますが、添付ファイルは私に問題を与えています。SUDS(python)を使用してMTOM/XOP添付ファイルを復号化できません

マイコード:

from Crypto.Cipher import AES 
from Crypto import Random 

class AESCipher: 
    def __init__(self, key, BS = 16): 
     self.key = key 
     self.BS = BS 
    def _pad(self, s): 
     return s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS) 
    def _unpad(self, s): 
     return s[:-ord(s[len(s)-1:])] 
    def decrypt(self, enc): 
     enc = base64.b64decode(enc) 
     iv = enc[:self.BS] 
     cipher = AES.new(self.key, AES.MODE_CBC, iv) 
     return self._unpad(cipher.decrypt(enc[self.BS:])) 

with open('test/resp-down-file','rb') as f: 
    encFile = f.read() 

#...the key is extracted elsewhere... 

cryptor = AESCipher(key) 
cryptor.decrypt(encFile) 

せいぜい私は文字化けして結果を取得していますが、通常はそれだけでError while decrypting in CBC modeを言います。 質問:この問題を抱える人は誰ですか?私はPython、Java、PHP、Perl、Cなど、Linux上で動作するものはすべてsuggetionsにオープンしています。 MTOM/XOP添付ファイルの暗号化方法には特別なものがありますか?

私はすでにthis質問を見ましたが、正解がありません。オクテット/ストリームはコンテンツタイプであり配信メカニズムではないので、答えは正しくありません。

編集:サーバ仕様では、AES128-CBCアルゴリズムとPKCS5パディングを使用してメッセージを暗号化しています。彼らがAES暗号化のためにDES埋め込みを使用することは私には意味がありませんが、それについては断言しています。

Edit2:添付されたメッセージの長さがAES128の正しい長さ(6023バイトまたは4071バイトなど)にならないことがあります。

参考のためのメッセージは、この形式で入ってきた:

--MIMEBoundaryurn_uuid_641B9D88B371C8A80C1501095406237 
Content-Type: text/xml; charset=UTF-8 
Content-Transfer-Encoding: binary 
Content-ID: <0.urn:uuid:[email protected]> 

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
... 
</soapenv:Envelope> 

--MIMEBoundaryurn_uuid_641B9D88B371C8A80C1501095406237 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: binary 
Content-ID: <urn:uuid:[email protected]> 

­8eJ¨%• }\ Œ“\ò½<( nË%¸£käö0 ‡XW�5ìR Ë�¾p�Áëş3Âå'¹5¥#=Zg¡øø{I~FP�n ×aµR^Föž¤¥EÍf«Îê�0qÊMö²È€]®PÌ>[email protected]‡ Cş®±9>Áf7P’#ã …fç~yxÔ.å–×v›±Cô„Ê 
... 
--MIMEBoundaryurn_uuid_641B9D88B371C8A80C1501095406237-- 

答えて

0

私はこの問題を考え出しました。私はresult.textを使用していたので、結局のところ、result = requests.post(....)を使用して、私は、データを受信方法は、(いくつかの非印字可能な文字を整えた。

今、私はresult.raw.read()に切り替えたと問題が解決される。

関連する問題