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



JS 实现MD5加密,以及发现的JS对字符的处理、替换实例。在实际开发工作中,用到接口开发,报文采用的是MD5加密方式,自己想做一个html的静态页面来实现报文的封装和加密,在这个过程中就发现了js对双引号“””的处理不像看上去那么简单了。还有js替换字符串的方法。

js实现MD5加密:

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

  1. <span style=”font-size:14px;”>  <body>
  2.     <form  id=”formDom” action=”" accept=”application/json” method=”post” target=”_blank”>
  3.     data<textarea id=”taData” rows=”10″ cols=”40″ name=”data”>{“id”:”55″,”type”:”province”}</textarea><br/>
  4.     sign<input  name=”sign” id=”sign” value=”b217c713485ca913edef6fe87f3ba3a0″ size=”40″/><br/>
  5.     <input type=”button” id=”butSing” value=”签 名” />
  6.     <input type=”submit” id=”butSubmit” value=”提 交” />
  7.     </form>
  8.   </body></span>

 

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. <span style=”font-size:14px;”>function signData(){
  2.     var enStr = $(“#taData”).text();
  3.     var hex_md5_str = hex_md5(enStr);
  4.     $(“#sign”).val(hex_md5_str);
  5. }</span>

报文格式:

  1. <span style=”font-size:14px;”>{“id”:”1″,”type”:”province”}</span>


对于这个功能首先想到的是这种实现,本身实现思路没问题,关键在于签出的MD5上,字母、数字、汉字没问题,但是报文中双引号“ ” ”等就不行了,MD5就不一样了。
页面输出签名前的报文:

  1. <span style=”font-size:14px;”><label id=”enStr”></label>
  2. $(“#enStr”).html(enStr);</span>

页面输出没问题,是一样的。
首先会想到会不会是双引号格式不同,我就将双引号全部替换成“ \” ”再签名,也不对。

在学习js替换时js的replace(“”,”")方法只能替换第一个匹配字符,比如

  1. <span style=”font-size:14px;”>”anbsa”.replace(“a”,”1″)</span>

输出结果为:“1nbsa”
所以这里就要用到正则表达式来替换:

  1. “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了签名一样了

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片

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