您的位置:首页 > Web前端 > JavaScript

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

2014-03-13 16:25 573 查看
在实际开发工作中,用到接口开发,报文采用的是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”

本来想用这个方式替换“\"”为“"”发现替换无效还是“{"id":"1","type":"province"}”

但是用“alert()”打印后发现了问题

打印输出为:“{"id":"1","type":"province"}”

问题就在这,页面显示为双引号但是js在处理时却是转义了所以签名一直不一致,问题找到了就好解决了,将字符里面的“"”替换为双引号,然后打印看看,ok了签名一样了

hex_md5(enStr.replace(new RegExp(""","g"),"\""));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: