其中用到一個加密解密工具類,如下:
import java.security.SecureRandom;<br />import javax.crypto.Cipher;<br />import javax.crypto.SecretKey;<br />import javax.crypto.SecretKeyFactory;<br />import javax.crypto.spec.DESKeySpec;</p><p>import sun.misc.BASE64Decoder;<br />import sun.misc.BASE64Encoder;</p><p>public class DESHelper {<br /> /**<br /> * 加密解密介面<br /> * @param data 資料<br /> * @param password 加密解密密碼 必須8位位元組<br /> * @param flag 加密解密標誌 0:加密 ,1:解密<br /> * @return<br /> */<br /> public static String doWork(String data, String password,int flag) {<br /> try {<br /> SecureRandom random = new SecureRandom();<br /> DESKeySpec desKey = new DESKeySpec(password.getBytes());<br /> SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");<br /> SecretKey securekey = keyFactory.generateSecret(desKey);<br /> Cipher cipher = Cipher.getInstance("DES");<br /> //<br /> if(flag == 0){<br /> BASE64Encoder base64encoder = new BASE64Encoder();<br /> cipher.init(Cipher.ENCRYPT_MODE, securekey, random);<br /> return base64encoder.encode(cipher.doFinal(data.getBytes("UTF-8")));<br /> }else{<br /> BASE64Decoder base64decoder = new BASE64Decoder();<br /> byte[] encodeByte = base64decoder.decodeBuffer(data);<br /> cipher.init(Cipher.DECRYPT_MODE, securekey, random);<br /> byte[] decoder = cipher.doFinal(encodeByte);<br /> return new String(decoder,"UTF-8");<br /> }</p><p> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> return null;<br /> }</p><p> /**<br /> * test<br /> * @param args<br /> */<br /> public static void main(String[] args) {<br /> try {<br /> // 明文<br /> String str = "mobile:15810557051|type:0|content:你好";<br /> // 密碼<br /> String password = "01010101";<br /> String desc = DESHelper.doWork(str, password,0);<br /> System.out.println("密文:" + desc);<br /> // 解密<br /> str = DESHelper.doWork(desc, password,1);<br /> System.out.println("明文:" +str);<br /> } catch (Exception e1) {<br /> e1.printStackTrace();<br /> }</p><p> }<br />}<br />
服務端需要一個jsp及一個java類,jsp直接調java類,或者直接寫在servlet中也可以,服務端如下:
import java.io.BufferedReader;<br />import java.io.IOException;<br />import java.io.InputStreamReader;<br />import java.io.OutputStreamWriter;<br />import java.net.MalformedURLException;</p><p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p><p>import com.sohu.lq.pub.util.DESHelper;</p><p>public class Server {<br /> public static void post(HttpServletRequest request,HttpServletResponse response){<br /> String result = "";<br /> try {<br /> request.setCharacterEncoding("UTF-8");<br /> BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));<br /> String line = "";<br /> StringBuffer buf = new StringBuffer();<br /> while ( (line = br.readLine()) != null ) {<br /> buf.append(line);<br /> }<br /> result = buf.toString();<br /> System.out.println(DESHelper.doWork(result, "01010101", 1));</p><p> response.setHeader("cache-control", "no-cache");<br /> response.setCharacterEncoding("UTF-8");<br /> response.setContentType("text/html");<br /> OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());<br /> String xmlInfo = "mobile:使用者號碼|type:電訊廠商標誌|content:你好";<br /> out.write(DESHelper.doWork(xmlInfo, "01010101", 0));<br /> out.flush();<br /> out.close();<br /> //System.out.println("返回:"+xmlInfo);<br /> } catch (MalformedURLException e) {<br /> e.printStackTrace();<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> //return "toff : "+result;<br /> }<br />}<br />
server.jsp頁面如下:
<%@ page contentType="text/html; charset=gbk"%><br /><%<br /> com.sohu.sms.bus.Server.post(request,response);<br />%>
加入該jsp部署在本地,地址為:http://localhost:8080/sms/media/bus/server.jsp
用戶端實現如下:
import java.io.BufferedReader;<br />import java.io.IOException;<br />import java.io.InputStreamReader;<br />import java.io.OutputStreamWriter;<br />import java.net.MalformedURLException;<br />import java.net.URL;<br />import java.net.URLConnection;</p><p>import com.sohu.lq.pub.util.DESHelper;</p><p>public class Client {<br /> public static void post(){<br /> String result = "";<br /> try {<br /> String urlStr = "http://localhost:8080/sms/media/bus/server.jsp";<br /> URL url = new URL(urlStr);<br /> URLConnection con = url.openConnection();<br /> con.setDoOutput(true);<br /> con.setRequestProperty("Pragma:", "no-cache");<br /> con.setRequestProperty("Cache-Control", "no-cache");<br /> con.setRequestProperty("Content-Type", "text/html");</p><p> OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());<br /> String xmlInfo = "mobile:使用者號碼|type:電訊廠商標誌|content:我來了";<br /> out.write(DESHelper.doWork(xmlInfo, "01010101", 0));<br /> out.flush();<br /> out.close();</p><p> BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));<br /> String line = "";<br /> StringBuffer buf = new StringBuffer();<br /> while ( (line = br.readLine()) != null ) {<br /> buf.append(line);<br /> }<br /> result = buf.toString();<br /> result = DESHelper.doWork(result, "01010101", 1);<br /> System.out.println("回複:"+result);<br /> //result = new String(DESHelper.doWork(result, "sopu01hz", 1));<br /> //System.out.println(result);<br /> } catch (MalformedURLException e) {<br /> e.printStackTrace();<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> public static void main(String[] args){<br /> Client.post();<br /> }<br />}<br />
直接執行Client.java結果如下:
回複:mobile:使用者號碼|type:電訊廠商標誌|content:你好
該執行個體只是簡單實現服務用戶端模式,代碼還需要最佳化,目前發送內容可以有多種方式,比如直接socket實現,或http實現,或者通過發布webservice實現,傳輸資料可以多種多樣,標準的一般通過傳輸xml格式資料或json格式資料;目前json開源架構很多,可以進行json序列化還原序列化,我用到一個XStream開源架構,來進行java對象與xml序列化還原序列化,同時直接java對象與json序列化還原序列化。
如果要做為多平台介面,建議通過發送標準的xml格式或json格式資料,這樣擴充性更好。