出于安全,近来的项目要求对传递给后端的参数数据添加签名,后端Java用的是MD5解密,要求也相应地使用MD5加密。很自然会git到angular-md5.js这个工具包。使用很简单,用服务作为参数注入调用md5.createHash方法进行MD5加密。作者甚至还提供了两个过滤器方便大家使用。
不过在和后端调时我发现这个方法不支持中文。看后端,为支持中文用的是UTF8解码,那相应的前端也应该使用UTF8编码。对照angular-md5.js仔细看了一下angular-md5.js的源码,原来确实没有做UTF8编码。如何让angular-md5.js支持UTF8参照jQuery-md5.js?其实不难,只要添加uTF8Encode方法,并在convertToWordArray返回值前调用就行了。如下代码片段:
var uTF8Encode = function(string) {
string = string.replace(/\x0d\x0a/g, "\x0a");
var output = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
output += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
output += String.fromCharCode((c >> 6) | 192);
output += String.fromCharCode((c & 63) | 128);
} else {
output += String.fromCharCode((c >> 12) | 224);
output += String.fromCharCode(((c >> 6) & 63) | 128);
output += String.fromCharCode((c & 63) | 128);
}
}
return output;
};
var x = [], k, AA, BB, CC, DD, a, b, c, d, S11 = 7, S12 = 12, S13 = 17,
S14 = 22, S21 = 5, S22 = 9, S23 = 14, S24 = 20, S31 = 4, S32 = 11,
S33 = 16, S34 = 23, S41 = 6, S42 = 10, S43 = 15, S44 = 21;
x = convertToWordArray(uTF8Encode(str));
Happy coding ✌️
评论 (0)