JS 实现MD5加密,以及发现的JS对字符的处理、替换实例。在实际开发工作中,用到接口开发,报文采用的是MD5加密方式,自己想做一个html的静态页面来实现报文的封装和加密,在这个过程中就发现了js对双引号“””的处理不像看上去那么简单了。还有js替换字符串的方法。
js实现MD5加密:
相关js文件下载地址:http://download.csdn.net/detail/songylwq/7034729
- <span style=”font-size:14px;”> <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></span>
- <span style=”font-size:14px;”>function signData(){
- var enStr = $(“#taData”).text();
- var hex_md5_str = hex_md5(enStr);
- $(“#sign”).val(hex_md5_str);
- }</span>
报文格式:
- <span style=”font-size:14px;”>{“id”:”1″,”type”:”province”}</span>
对于这个功能首先想到的是这种实现,本身实现思路没问题,关键在于签出的MD5上,字母、数字、汉字没问题,但是报文中双引号“ ” ”等就不行了,MD5就不一样了。
页面输出签名前的报文:
- <span style=”font-size:14px;”><label id=”enStr”></label>
- $(“#enStr”).html(enStr);</span>
页面输出没问题,是一样的。
首先会想到会不会是双引号格式不同,我就将双引号全部替换成“ \” ”再签名,也不对。
在学习js替换时js的replace(“”,”")方法只能替换第一个匹配字符,比如
- <span style=”font-size:14px;”>”anbsa”.replace(“a”,”1″)</span>
输出结果为:“1nbsa”
所以这里就要用到正则表达式来替换:
- “ansfla”.replace(new RegExp(“a”,”g”),”1″)
输出结果为:“1nsfl1”
本来想用这个方式替换“\””为“"”发现替换无效还是“{“id”:”1″,”type”:”province”}”
但是用“alert()”打印后发现了问题
打印输出为:“{"id":"1","type":"province"}”
问题就在这,页面显示为双引号但是js在处理时却是转义了所以签名一直不一致,问题找到了就好解决了,将字符里面的“"”替换为双引号,然后打印看看,ok了签名一样了
- hex_md5(enStr.replace(new RegExp(“”",”g”),”\”"));