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


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

相關js文件下載地址:http://download.csdn.net/detail/songylwq/7034729

  <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"),"\""));







發佈了150 篇原創文章 · 獲贊 91 · 訪問量 159萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章