讓ksoap支持wsse加密的soap報文
前言
最近,做基于soap服務的項目,獲得的一些經驗性技巧,分享給大家
WSSE是什么?
支持6種不同的加密方式,不過我這里只介紹Username Token Profile 1.1
開始動手
閱讀Username Token Profile 1.1 后你會知道,我們需要在soap報文頭加上什么XML結點,這里就不對XML結點進行介紹,官方文檔已經介紹的很詳細了.
你已經知道了XML結點的含義以后,就繼續看下去,怎么構造符合要求的password
構造password
其實,WSSE最核心就是我們如何構造生成這個密鑰,從官方文檔中我們知道密鑰的讀取是:
Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )
整個密鑰關鍵是由:隨機字符串,創建時間,和真實密碼構成,知道這點以后就是如何利用java 按照這個步驟生成密鑰
生成算法
這部分對于懂的人很簡單,但是對于不知道的很困難,之前,我就一直死在了這塊,還好有個朋友幫了我一把終于搞明白,原來在jjava下是這么簡單的.
首先,要處理SHA-1算法:
在java 下實現 sha-a 算法實在簡單:
MessageDigest md; md = MessageDigest.getInstance("SHA-1");
就這樣就可以完成了SHA算法的初始化,實在簡單呀,之前,我還到處去找包實現,實在對Java太不了解了
生成了這么一個SHA 對象,只是開始,我們需要填充相應的值進去即可.下面要了解請認真觀看
//從官方文檔可以知道我們nonce還需要用這里用的是Koap自帶的Base64解碼一次 byte[] b1 = nonce != null ? Base64.decode(nonce) : new byte[0]; //生成字符字節流 byte[] b2 = created != null ? created.getBytes("UTF-8") : new byte[0]; byte[] b3 = password; //根據我們傳得值的長度生成流的長度 byte[] b4 = new byte[b1.length + b2.length + b3.length];接下來就是根據文檔拼接我們的字符串
//利用sha-1加密字符 md.update(b1, 0, b1.length); md.update(b2,0,b2.length); md.update(b3,0,b3.length); //生成sha-1加密后的流b4 = md.digest(); //生成最終的加密字符串 String result = new String(Base64.encode(b4));
之前,花了好幾個小時,在這方面的資料,最后,發現原來可以這么簡單,也許是平時接觸的加密等級不高所造成的吧.
轉自:http://blog.csdn.net/youxiachai/article/details/7067192
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!