我正在处理soap客户端,在读取(和解密)响应附件时遇到问题。附件使用MTOM机制包含在响应中,并通过AES128-CBC算法加密(密钥包含在响应xml标头中)。
以下是响应的基本结构:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope>
.. the xml data that includes the secret key for the attachment
decryption usign AES algorithm.
</soapenv:Envelope>
--MIMEBoundaryurn_uuid_174A74CB7221A5AF451426570004765
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <urn:uuid:174A74CB7221A5AF451426570004768@apache.org>
iQ�<]�+)B�ل�$O:���'�zT�F�x�����������}�t��݄��')#^��&�a�p}Q��¨גZ<G�%_"��|
Ps�<���'9��g](ǧ">�l��� ��XPrJ��jM�f�<$�)Q�*��
--MIMEBoundaryurn_uuid_174A74CB7221A5AF451426570004765--
MTOM机制意味着附件以二进制字符串的形式发送(不编码到base64)。正如我所建议的,这个二进制字符串必须通过AES进行解密。但不幸的是,应用AES解密的长度错误——AES使用16字节的块,因此密码必须是16的倍数。但事实并非如此,例如在上述示例中,连接长度为250。
也许我遗漏了什么,在解密附件二进制字符串之前必须对其进行某种转换?
附言:响应xml主体的部分使用相同的算法(AES128-CBC)加密,但作为base64密码发送,必须对其进行解码以获得二进制字符串,然后解密。这很好用。解码后的主体密码具有合适的长度——16的倍数,并且可以毫无问题地解密。
提前感谢您的任何想法或想法!
旧的,但来自Oracle,大约在页面的一半
注意:流媒体MTOM不能与消息一起使用加密。
http://docs.oracle.com/cd/E14571_01/web.1111/e13734/mtom.htm#WSADV141