现在的位置: 首页 > 综合 > 正文

JS 实现MD5加密,以及发现的JS对字符的处理、替换等

2018年05月22日 ⁄ 综合 ⁄ 共 1325字 ⁄ 字号 评论关闭

        在实际开发工作中,用到接口开发,报文采用的是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"),"\""));







抱歉!评论已关闭.