摘 要:由于當今Web服務存在多種數(shù)據(jù)傳輸格式,不同的數(shù)據(jù)格式所需存儲方法的實現(xiàn)代碼存在差異,因此迫切地希望提高代碼的彈性,以適應未來的各種數(shù)據(jù)格式。本文簡單介紹了Web服務,RESTful和參數(shù)傳遞,進一步提高了代碼的彈性,并以“秘密情書”為例著重介紹了兩種加密算法,利用其對明文進行加密,降低泄露的可能性,保證信息的安全和可靠。
關鍵詞:Web Service;RESTful;加密算法;參數(shù)傳遞
中圖分類號:TP393.09 文獻標識碼:A 文章編號:2096-4706(2019)02-0100-03
Abstract:Based on the existence of multiple data transmission formats in today’s Web services,different data formats require differences in the implementation code of storage methods. Therefore,it is urgent to improve the flexibility of the code to adapt to various data formats in the future. This article briefly introduces Web services,RESTful and parameter transfer,further improving the flexibility of the code,and introduces two encryption algorithms with a case column “secret love letter” to use it to encrypt plaintext and reduce the possibility of leakage. Ensure the safety and reliability of information.
Keywords:Web Service;RESTful;encryption algorithm;parameter transfer
0 引 言
隨著互聯(lián)網(wǎng)時代的發(fā)展,不同信息系統(tǒng)之間交互的數(shù)據(jù)格式存在差異,如果每次修改存儲方法的實現(xiàn)代碼,就使得代碼的彈性不夠,無法很好適應未來的Content-type,Mine-type和Media-type等各種類型格式,因此一種更有彈性的同樣可以實現(xiàn)該需求的代碼編寫被提了出來,這也是利用Web Service的方便之處。除此之外,在互聯(lián)網(wǎng)上傳遞信息有時候是很不安全的,一旦我們的信息被不法人員截獲,其便可以輕松了解信息的內(nèi)容,所以,在此提出了兩種加密算法在傳輸過程中對信息進行加密,接收方對信息進行解密后,便可以獲得信息的準確內(nèi)容。
1 Web服務的概念
在談到Web服務前,我先對服務進行簡單介紹。計算機中的服務是指某個具體功能。提供計算1+1=2的功能是一種服務;提供翻譯功能是一種服務;根據(jù)你輸入的圓的半徑幫你畫一個圓也是一種服務;更不用說常使用到的外賣服務、地圖服務和交通服務等等。那么什么是Web服務呢?Web服務就是指使用http或https協(xié)議接受用戶的請求并提供功能服務的方式。平時中一個常見的Web服務例子,用戶在谷歌瀏覽器的地址欄中輸入http://www.baidu.com之后(按Enter鍵),瀏覽器顯示“百度搜索”這個搜索引擎。為什么我會將其理解為Web服務呢?因為首先這個服務是基于http協(xié)議的,然后,在從地址欄輸入URI到顯示“百度搜索”這整個過程是輸入URI之后(按Enter鍵),瀏覽器客戶端將http://www.baidu.com請求發(fā)送到服務器,請求服務器響應,服務器對這個請求進行解析,發(fā)現(xiàn)存在一個服務可以滿足這個請求,之后便將其對應的html文件發(fā)送到客戶端顯示出來。
2 RESTful的概念
REST的全稱是Representational State Transfer,直譯為表述性狀態(tài)轉(zhuǎn)移。REST在2000年被Roy Fielding提出,是一種利用萬維網(wǎng)的相關技術以及協(xié)議來構建大規(guī)模網(wǎng)絡軟件的構架方式。REST意在說明,數(shù)據(jù)資源是可以被定義,被發(fā)布的,并且在此基礎上將信息的交換變得簡單并具有可擴展性。RESTful=REST+ful,既具有REST特征的設計風格。
3 API簡單參數(shù)傳遞
這里提到的簡單參數(shù)是指非結構化的參數(shù),如一個數(shù)值、一個字符串這樣的用簡單變量進行接受處理的參數(shù)。
簡單參數(shù)傳遞可以選擇兩種方式傳遞:(1)附加在路徑上,表觀現(xiàn)象如真實的資源路徑無差異。(2)附加在資源路徑的之后,按照標準的值對鏈條進行傳參。前者稱為@PathParam注解傳參,后者稱之為@QueryParam注解傳參。
3.1 @PathParam注解
路徑傳參,就參數(shù)傳遞的形式而言是將參數(shù)嵌入到路徑中,并從表觀形態(tài)上與資源實體所對應的路徑具有不可區(qū)分性。@PathParam語法形式:@PathParam(“路徑中的參數(shù)名”)parameterType parameterName。在@PathParam中配置參數(shù)模板:@Path(“/path1/.../pathk/.../pathn”),示例:@Path(“/path/{name}/a/{age}/{gender}/myfile”)。在Class方法的參數(shù)列表中為相關參數(shù)配置@PathParam標注,進行參數(shù)賦值,示例:public String testPath(@Path Param(“age”) int age,@PathParam(“name”) String name,@PathParam(“gender”) String gender)。
@Path與@PathParam注解聯(lián)合工作原理:當用戶請求路徑http://127.0.0.1/restful/test/path/張三/a/23/男/myfile時,請求路徑與容器內(nèi)注冊模板進行匹配,發(fā)現(xiàn)@PathParam(“/path/{name}/a/{age}/{gender}/myfile”)匹配成功,接著進行路徑參數(shù)解析,將name賦值為張三,age賦值為23,gender賦值為男,方法體代碼正確執(zhí)行后通過@Produces標注返回給用戶的結果。
3.2 @QueryParam注解
Query是指URL中由“問號”引導出的值對參數(shù)鏈條。Query傳參形式:http://host:port/path?Param1=value1&...¶mn=valuen。
@QueryParam語法形式:@QueryParam(“路徑中的參數(shù)名”) parameterType parameterName。在Class方法的參數(shù)列表中為相關參數(shù)配置@QueryParam標注,進行參數(shù)賦值,示例:public String testQuery(@QueryParam (“age”) int age,@QueryParam(“name”) String name,@QueryParam(“gender”) String gender)。
@QueryParam注解工作原理:當用戶請求路徑http: //127.0.0.1/restful/test/query?name=張三&age=23& gender=男,請求路徑與容器內(nèi)注冊模板進行匹配,發(fā)現(xiàn)public String testQuery(@QueryParam(“age”) int age,@QueryParam(“name”) String name,@QueryParam (“gender”) String gender)匹配成功,接著進行路徑參數(shù)解析,將name賦值為張三,age賦值為23,gender賦值為男,方法體代碼正確執(zhí)行后通過@Produces標注返回給用戶的結果。
4 Form表單參數(shù)傳遞
Form表單是一個容器,可將容器內(nèi)的對象集合組織成參數(shù)集合,并向服務器發(fā)送這些參數(shù)。該容器內(nèi)的常見可用于參數(shù)傳遞的對象如:input,select,textarea等。@Form語法:@Form parameterType parameterName。在Class方法中用法,示例:public String testForm(@Form FormRequestValues form)。與@Form匹配的parameterType類:需要在類的每個屬性前加一個@FormParam注解,注解中填入表單中控件的name屬性值。
5 加密算法
在這個過程中,我簡單介紹一個信息交互過程“秘密的情書”,如圖1所示。
5.1 算法A
Cipher1結構:C1,R1,C2,R2,…,Cn,Rn。Cipher1實例:72,01,75,02,74,03,73,04,其中Ci和Ri為ASCII的16進制形式,各自表示一個字節(jié)從Cipher1中獲取key的各組成字節(jié):keyBytes[i]=(Ci xor Ri);從Cipher1中獲取key的示例:keyBytes[0]=(72 xor 01);keyBytes[1]=
(75 xor 02);keyBytes[2]=(74 xor 03);keyBytes[3] =(73 xor 04);key=new String(keyBytes),下面給出實現(xiàn)代碼。
public static String getCipherKey(@Form Step1 step1) {
String secret=step1.getSecret().trim();
byte[] keyBytes=new byte[secret.length() / 4];
int k=0;
for (int i = 0; i < secret.length(); i += 4) {
String temp1 = secret.substring(i, i + 2);
byte ci = (byte) Integer.parseInt(temp1, 16);
String temp2 = secret.substring(i + 2, i + 4);
byte ri = (byte) Integer.parseInt(temp2, 16);
keyBytes[k++] = (byte) (ci ^ ri);
}
String key = new String(keyBytes);
return key;
}
5.2 算法B
明文結構:T1,T2,T3,T4,…,Tn-1,Tn,密鑰結構:K1,K2,K3,K4,K5,K6,K7,將key視為明文,將自己的學號視為密鑰,調(diào)用算法B,混合生成newKey:newKey[i]=(Ti xor Ki);注意:當Km從為密鑰最后一個字節(jié)時,Km+1=K0,Km+2=K1,即密鑰將重新從自己的首字節(jié)開始與明文按字節(jié)進行xor運算,直至計算完明文的最后一個字節(jié)為止。張華在得到newKey后,再次使用算法B加密自己的短消息,此時需要加密的短消息為明文,newKey為密鑰,算法不變。注意在這個算法中,還將引入隨機數(shù)。利用Java中的getBytes[]方法獲取學號和明文的byte數(shù)組,接著生成隨機數(shù),將學號和明文的數(shù)組元素和隨機數(shù)進行異或,將異或的結果和隨機數(shù)作為最后newKey的結果。
public static String createCipherKey(@Form Step2 step2) {
String mingwen = step2.getMingwen().trim();
String number = step2.getNumber().trim();
byte[] mw = mingwen.getBytes();
byte[] xuehao = number.getBytes();
String str = "";
for (int i = 0; i < mw.length; i++) {
byte temp1 = mw[i];
byte temp2 = xuehao[i % xuehao.length];
int ran = (int) (Math.random() * 256);
int temp = temp1 ^ temp2 ^ ran;
String ranHexString = Integer.toHexString(ran);
if (ranHexString.length() < 2)
ranHexString = "0" + ranHexString;
String tempHexString = Integer.toHexString (temp);
if (tempHexString.length() < 2)
tempHexString = "0" + tempHexString;
str = str + ranHexString + tempHexString;
}
return str;
}
6 結 論
計算機網(wǎng)絡和Web技術的高速發(fā)展,為人們提供了便利,但隨之而來的是信息的安全問題,為此有必要以一種高效的算法對信息進行加密,防止不法分子對信息進行解密或讓其付出慘重代價,以此保證信息的安全性。在此,僅僅提出一個簡單的加密模型,在后期隨著知識的積累將對其進一步改進。
參考文獻:
[1] 韓陸.Java RESTful Web Service實戰(zhàn)(第二版) [D].北京:機械工業(yè)出版社,2018.
[2] 潘運平,王勝男,王曉川.基于WebService的整車物流管理信息系統(tǒng)研究 [J].武漢理工大學學報(信息與管理工程版),2013,35(5):710-713.
作者簡介:徐彤(1998.12-),男,江西鷹潭人,本科,主要研究方向:軟件工程理論與方法。