1. 程式人生 > >JS 實現MD5加密,以及發現的JS對字元的處理、替換等

JS 實現MD5加密,以及發現的JS對字元的處理、替換等


        在實際開發工作中,用到介面開發,報文采用的是MD5加密方式,自己想做一個html的靜態頁面來實現報文的封裝和加密,在這個過程中就發現了js對雙引號“"”的處理不像看上去那麼簡單了。還有js替換字串的方法。
js實現MD5加密:

  <body>
	<form  id="formDom" action="" accept="application/json" method="post" target="_blank">
	
	data<textarea id="taData" rows="10" cols="40" name="data">{"id":"55","type":"province"}</textarea><br/>
	sign<input  name="sign" id="sign" value="b217c713485ca913edef6fe87f3ba3a0" size="40"/><br/>
	
	<input type="button" id="butSing" value="籤 名" />    
	<input type="submit" id="butSubmit" value="提 交" />
	</form>
  </body>
function signData(){
	var enStr = $("#taData").text();
	var hex_md5_str = hex_md5(enStr);
	$("#sign").val(hex_md5_str);
}
報文格式:
{"id":"1","type":"province"}

對於這個功能首先想到的是這種實現,本身實現思路沒問題,關鍵在於簽出的MD5上,字母、數字、漢字沒問題,但是報文中雙引號“ " ”等就不行了,MD5就不一樣了。
頁面輸出簽名前的報文:

<label id="enStr"></label>

$("#enStr").html(enStr);

頁面輸出沒問題,是一樣的。
首先會想到會不會是雙引號格式不同,我就將雙引號全部替換成“ \" ”再簽名,也不對。

在學習js替換時js的replace("","")方法只能替換第一個匹配字元,比如

"anbsa".replace("a","1")

輸出結果為:“1nbsa”
所以這裡就要用到正則表示式來替換:

"ansfla".replace(new RegExp("a","g"),"1")


輸出結果為:“1nsfl1”
本來想用這個方式替換“\"”為“&quot;”發現替換無效還是“{"id":"1","type":"province"}”
但是用“alert()”列印後發現了問題
列印輸出為:“{&quot;id&quot;:&quot;1&quot;,&quot;type&quot;:&quot;province&quot;}”
問題就在這,頁面顯示為雙引號但是js在處理時卻是轉義了所以簽名一直不一致,問題找到了就好解決了,將字元裡面的“&quot;”替換為雙引號,然後列印看看,ok了簽名一樣了

hex_md5(enStr.replace(new RegExp(""","g"),"\""));