Ich habe einen SOAP-Client, der eine Datei von einem Server herunterlädt. Die Anfrage hat ihren Körper und Anhang (die Datei) mit zwei separaten Schlüsseln verschlüsselt. Beide Schlüssel sind in den entsprechenden <xenc:EncryptedKey>
Tags enthalten. Ich kann den Körper ohne Probleme mit einem der Schlüssel entschlüsseln, aber der Anhang gibt mir Probleme.Kann MTOM/XOP-Anlage mit SUDS (Python) nicht entschlüsseln
Mein Code:
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)
Allenfalls ich bin verstümmeltes Ergebnis zu erzielen, aber in der Regel heißt es nur Error while decrypting in CBC mode
. Frage: Ist jemand auf dieses Problem gestoßen? Ich bin offen für Vorschläge in Python, Java, PHP, Perl, C, so ziemlich alles, was unter Linux läuft. Gibt es etwas Besonderes an der Art, wie MTOM/XOP-Anhänge verschlüsselt sind?
Ich sah this Frage bereits, aber es hat keine richtige Antwort. Das Oktett/Stream verweist auf den Inhaltstyp, nicht auf den Übermittlungsmechanismus, sodass die Antwort falsch ist.
Bearbeiten: die Server-Spezifikation sagt, dass sie die Nachricht mit AES128-CBC-Algorithmus mit PKCS5 Padding verschlüsseln. Es macht keinen Sinn für mich, dass sie DES-Padding für AES-Verschlüsselung verwenden, aber sie sind unnachgiebig.
EDIT2: manchmal die beigefügte Nachricht nicht die richtige Länge für AES128 Entschlüsselung (z.B. 6023 Bytes oder 4071 Bytes).
Als Referenz kommt die Nachricht in diesem Format in:
--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--