【IT168 信息化】
XML Encryption Syntax and Processing标准也是W3C制定的关于如何用XML标签表示密文的语法,以及加密/解密操作应该遵循的规则的协议。该协议定义了三种加密的粒度:1)元素(element),用于把明文XML文件中的一个元素(包含标记),及其子元素的内容加密;2)内容(content),加密明文XML文件中某个元素的内容,他跟前面粒度的区别仅在于这种方式不加密标记(tag);3)整个文档,这时候明文被看成字节流,所以这种方式可以加密任何数据,包括非XML格式的数据。加密后的信息都放在<EncryptedData>标记中,该标记的语法如下:
<EncryptionMethod>:描述加密算法。可选,如果没有这一项,则发送和接受方应该事先协商好加密算法。
<ds:KeyInfo>:描述密钥信息,如获取方式、别名等。可选,同上。
<CipherData>:加密数据,包括加密粒度、密文等。
<EncryptionProperties>:关于加密算法和密钥的附加信息。可选。
协议还允许把密钥也在同一个XML文件中传输。该密钥必须被加密后放在<EncryptedKey>标记中,关于<EncryptedKey>的语法这里不再描述。
看一个简单的例子:
<?xml version='1.0'?>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" MimeType="text/xml">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:KeyName>MyKeyIdentifier</ds:KeyName>
</ds:KeyInfo>
<CipherData>
<CipherValue>B457V645B45........</CipherValue>
</CipherData>
</EncryptedData>
这个例子加密了一个外部XML文件,使用的加密算法是aes128-cbc,同时描述了用于解密的密钥标识(假定接受方知道如何通过该标识找到密钥)。接受方受到这个消息后根据密文(<CipherValue>里面的值)和密钥算出明文。