国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

利用WSE 加密SOAP報文(4)

2024-07-21 02:21:40
字體:
來源:轉載
供稿:網友
加密對外發送的報文

這里我簡單描述下如何創建一個可以返回個被加密的xml文檔的web服務。第一步先用using指示符來添加必要的命名空間,如下:

using system.web.services;

using microsoft.web.services;

using microsoft.web.services.security;

using system.security.cryptography;

using system.security.cryptography.xml;

using system.xml;

getxmldocument方法使用了的.net框架實現的三元des算法,采用128位密鑰和64位初始化向量(iv),能夠生成對稱密鑰。這個密鑰還將擁有一個名字,并被添加到應答報文的soapcontext元素上,之后被securityoutputfilter使用于加密簡單的xml文檔,這個方法最后將返回給客戶端。更多關于.net框架的加密技術,請看.net框架開發者指南上的cryptography overview一文。

//返回由三元des對稱算法加密后的數據

[webmethod (description="返回一個由對稱加密算法機密后的敏感xml文檔", enablesession=false)]



public xmldocument getxmldocument()

{

//創建一個用于返回的簡單的xml文檔

xmldocument mydoc = new xmldocument();

mydoc.innerxml =

"<encryptedresponse>這里是敏感數據.</encryptedresponse>";



//得到對外發送的回應報文的soapcontext

soapcontext mycontext = httpsoapcontext.responsecontext;



//創建一個用于加密的對稱密鑰,由于密鑰是對稱的,這些相同的數據必須存在有需求的客戶端上。



//定義共享的16字節數組,用來表示128位密鑰

byte[] keybytes = {48, 218, 89, 25, 222, 209, 227, 51, 50, 168, 146,

188, 250, 166, 5, 206};



//定義共享的8字節(64位)數組,也就是初始化向量(iv)

byte[] ivbytes = {16, 143, 111, 77, 233, 137, 12, 72};



//創建三元des算法的新實例

symmetricalgorithm mysymalg = new tripledescryptoserviceprovider();



//設置好密鑰和iv

mysymalg.key = keybytes;

mysymalg.iv = ivbytes;





//創建一個新的wse對稱加密密鑰

encryptionkey mykey = new symmetricencryptionkey(mysymalg);





//給他取個名字j

keyinfoname mykeyname = new keyinfoname();

mykeyname.value = "http://example.com/symmetrictestkey";

mykey.keyinfo.addclause(mykeyname);





//使用對稱密鑰來創建一個新的encrypteddata元素

encrypteddata myencdata = new encrypteddata(mykey);





//將encrypteddata元素添加到soap回應上,告訴過濾器用指定的密鑰來加密信息正文



mycontext.security.elements.add(myencdata);



return mydoc;

}

基于前面的方法,wse管道產生了下面有相應的安全頭信息,密文和密鑰信息的回應報文:

<?xml version="1.0" encoding="utf-8"?>

<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"

xmlns:xsd="http://www.w3.org/2001/xmlschema">

<soap:header>

<wsu:timestamp

xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">

<wsu:created>2003-02-11t02:07:23z</wsu:created>

<wsu:expires>2003-02-11t02:12:23z</wsu:expires>

</wsu:timestamp>

<wsse:security soap:mustunderstand="1"

xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">

<xenc:referencelist

xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

<xenc:datareference uri=

"#encryptedcontent-f50076e3-5aea-435e-8493-5d7860191411" />

</xenc:referencelist>

</wsse:security>

</soap:header>

<soap:body xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"

wsu:id="id-d2f22e02-a052-4dcb-8fbc-8591a45b8a9f">

<xenc:encrypteddata

id="encryptedcontent-f50076e3-5aea-435e-8493-5d7860191411"

type="http://www.w3.org/2001/04/xmlenc#content"

xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

<xenc:encryptionmethod

algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />

<keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#">

<keyname>http://example.com/symmetrictestkey</keyname>

</keyinfo>

<xenc:cipherdata>

<xenc:ciphervalue>0t5thogg14jmelph...qdjs=</xenc:ciphervalue>

</xenc:cipherdata>

</xenc:encrypteddata>

</soap:body>

</soap:envelope>

注意,在報文正文中referencelist元素包含了一個到encrypteddata元素的引用,這個元素包含了密鑰的名字,使用的加密算法和一個數據的密文形式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青铜峡市| 苍山县| 马关县| 建阳市| 大荔县| 佛教| 平乡县| 饶河县| 湖州市| 岳普湖县| 临清市| 九寨沟县| 白玉县| 榆社县| 珲春市| 伊川县| 稷山县| 外汇| 太和县| 鸡泽县| 樟树市| 澄江县| 东乌珠穆沁旗| 长寿区| 阜新市| 临海市| 田阳县| 达州市| 玉田县| 珲春市| 疏勒县| 和政县| 平罗县| 美姑县| 梅河口市| 广丰县| 阜平县| 增城市| 文化| 永济市| 中西区|