js进行MD5加密(含中文),与后台JAVA加密之后结果不同(解决)_小胖龙的博客-程序员信息网_js md5 中文

技术标签: js  小程序  md5  

开发小程序过程中与后台进行接口沟通,前期接口经过MD5加密和AES加密之后,后台进行解密。

今天出现一种情况,我前台加密之后的md5串与后台加密不同,后台发现可能是带用中文的原因,

这是加密之前的串:

address=北京市朝阳区日坛北街33号C口&defult=1&phonenum=17600000693&userId=12&userName=小胖龙&key=E02353AF68EBE70D507EB8BF362460B5

之后换了一个MD5.js解决,具体原理好像是需要将中文先转为utf-8。

直接贴文件

function md5(string) {
  function md5_RotateLeft(lValue, iShiftBits) {
    return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
  }
  function md5_AddUnsigned(lX, lY) {
    var lX4, lY4, lX8, lY8, lResult;
    lX8 = (lX & 0x80000000);
    lY8 = (lY & 0x80000000);
    lX4 = (lX & 0x40000000);
    lY4 = (lY & 0x40000000);
    lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
    if (lX4 & lY4) {
      return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
    }
    if (lX4 | lY4) {
      if (lResult & 0x40000000) {
        return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
      } else {
        return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
      }
    } else {
      return (lResult ^ lX8 ^ lY8);
    }
  }
  function md5_F(x, y, z) {
    return (x & y) | ((~x) & z);
  }
  function md5_G(x, y, z) {
    return (x & z) | (y & (~z));
  }
  function md5_H(x, y, z) {
    return (x ^ y ^ z);
  }
  function md5_I(x, y, z) {
    return (y ^ (x | (~z)));
  }
  function md5_FF(a, b, c, d, x, s, ac) {
    a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac));
    return md5_AddUnsigned(md5_RotateLeft(a, s), b);
  };
  function md5_GG(a, b, c, d, x, s, ac) {
    a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_G(b, c, d), x), ac));
    return md5_AddUnsigned(md5_RotateLeft(a, s), b);
  };
  function md5_HH(a, b, c, d, x, s, ac) {
    a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_H(b, c, d), x), ac));
    return md5_AddUnsigned(md5_RotateLeft(a, s), b);
  };
  function md5_II(a, b, c, d, x, s, ac) {
    a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_I(b, c, d), x), ac));
    return md5_AddUnsigned(md5_RotateLeft(a, s), b);
  };
  function md5_ConvertToWordArray(string) {
    var lWordCount;
    var lMessageLength = string.length;
    var lNumberOfWords_temp1 = lMessageLength + 8;
    var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
    var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
    var lWordArray = Array(lNumberOfWords - 1);
    var lBytePosition = 0;
    var lByteCount = 0;
    while (lByteCount < lMessageLength) {
      lWordCount = (lByteCount - (lByteCount % 4)) / 4;
      lBytePosition = (lByteCount % 4) * 8;
      lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
      lByteCount++;
    }
    lWordCount = (lByteCount - (lByteCount % 4)) / 4;
    lBytePosition = (lByteCount % 4) * 8;
    lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
    lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
    lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
    return lWordArray;
  };
  function md5_WordToHex(lValue) {
    var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
    for (lCount = 0; lCount <= 3; lCount++) {
      lByte = (lValue >>> (lCount * 8)) & 255;
      WordToHexValue_temp = "0" + lByte.toString(16);
      WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
    }
    return WordToHexValue;
  };
  function md5_Utf8Encode(string) {
    string = string.replace(/\r\n/g, "\n");
    var utftext = "";
    for (var n = 0; n < string.length; n++) {
      var c = string.charCodeAt(n);
      if (c < 128) {
        utftext += String.fromCharCode(c);
      } else if ((c > 127) && (c < 2048)) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
      } else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
      }
    }
    return utftext;
  };
  var x = Array();
  var k, AA, BB, CC, DD, a, b, c, d;
  var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
  var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
  var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
  var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
  string = md5_Utf8Encode(string);
  x = md5_ConvertToWordArray(string);
  a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
  for (k = 0; k < x.length; k += 16) {
    AA = a; BB = b; CC = c; DD = d;
    a = md5_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
    d = md5_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
    c = md5_FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
    b = md5_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
    a = md5_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
    d = md5_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
    c = md5_FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
    b = md5_FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
    a = md5_FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
    d = md5_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
    c = md5_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
    b = md5_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
    a = md5_FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
    d = md5_FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
    c = md5_FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
    b = md5_FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
    a = md5_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
    d = md5_GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
    c = md5_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
    b = md5_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
    a = md5_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
    d = md5_GG(d, a, b, c, x[k + 10], S22, 0x2441453);
    c = md5_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
    b = md5_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
    a = md5_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
    d = md5_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
    c = md5_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
    b = md5_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
    a = md5_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
    d = md5_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
    c = md5_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
    b = md5_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
    a = md5_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
    d = md5_HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
    c = md5_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
    b = md5_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
    a = md5_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
    d = md5_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
    c = md5_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
    b = md5_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
    a = md5_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
    d = md5_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
    c = md5_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
    b = md5_HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
    a = md5_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
    d = md5_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
    c = md5_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
    b = md5_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
    a = md5_II(a, b, c, d, x[k + 0], S41, 0xF4292244);
    d = md5_II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
    c = md5_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
    b = md5_II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
    a = md5_II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
    d = md5_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
    c = md5_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
    b = md5_II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
    a = md5_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
    d = md5_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
    c = md5_II(c, d, a, b, x[k + 6], S43, 0xA3014314);
    b = md5_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
    a = md5_II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
    d = md5_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
    c = md5_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
    b = md5_II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
    a = md5_AddUnsigned(a, AA);
    b = md5_AddUnsigned(b, BB);
    c = md5_AddUnsigned(c, CC);
    d = md5_AddUnsigned(d, DD);
  }
  return (md5_WordToHex(a) + md5_WordToHex(b) + md5_WordToHex(c) + md5_WordToHex(d)).toLowerCase();
}


记得,如果小程序要加
module.exports = {
  md5: md5
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42275932/article/details/81001616

智能推荐

算法 时间复杂度概念及案例_阿顾同学的博客-程序员信息网

通过时间复杂度可以判断程序算法过程的优势和劣势,提高运行性能

HCIP(华为高级网络安全工程师)(实验五)(OSPF综合实验)_努力学IT的小徐的博客-程序员信息网_华为ospf综合实验

实验要求1、R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间均使用公有IP。2、R3、R5、R6、R7为MGRE环境,R3为中心站点。3、整个OSPF环境IP地址基于172.16.0.0/16划分。4、减少LSA的更新量,加快收敛,保证更新安全。5、全网可达。实验思路1、根据实验要求对172.16.0.0/16网段进行子网划分,方便之后的子网汇总,从而实现对路由条目的减少。2、对各个设备进行IP地址的配置,及环回接口的配置。3、对R3、R5、R6、R7..

Oracle DBA日常工作手册_万里的博客-程序员信息网_oracle情况trc

Oracle DBA日常工作手册 概述...2第一章.  事前阶段...3一 、 日常工作-每天应做工作内容...31、工作内容-日常环境监控...31.1系统运行环境监控...31.2数据库运行状况监控...32、工作内容-日常性能监控...42.1 间隔一段时间使用操作系统top等工具监控系统资源动态运行状况...42.2

深入C语言可变参数(va_arg,va_list,va_start,va_end,_INTSIZEOF)_linranguo的博客-程序员信息网_va_arg 参数数量

一、什么是可变参数         在C语言编程中有时会遇到一些参数个数可变的函数,例如printf(),scanf()函数,其函数原型为: int printf(const char* format,…),int scanf(const char *format,…);它除了有一个参数format固定以外,后面跟着的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可

软考信息系统项目管理师质量管理论文范例_Lucss的博客-程序员信息网_信息系统项目管理论文

​【摘要】本文以辽源市医疗保险市级统筹项目为实例,探讨了在项目质量管理中遇到的问题及解决方法。认为评审过程可交付物能及时发现和解决问题,同时,让客户实时了解开发过程能进一步树立客户对项目成功的信心。提出以制定质量管理计划、实施质量保证活动、质量控制为工作流程来指导项目的质量管理,对于质量管理中遇到的问题提出了解决的办法。我在该项目中担任了开发方的项目经理,自始至终参与了整个项目的建设,自2009年11月项目启动至2010年10月验收,历时近1年,系统至今运行稳定,取得客户的好评,很大程度上得益于项目成功的

python四级词汇采集_python+NLTK 自然语言学习处理四:获取文本语料和词汇资源_清浅池塘的博客-程序员信息网

在前面我们通过fromnltk.bookimport*的方式获取了一些预定义的文本。本章将讨论各种文本语料库1古腾堡语料库古腾堡是一个大型的电子图书在线网站,网址是http://www.gutenberg.org/。上面有超过36000本免费的电子图书,因此也是一个大型的预料库。NLTK也包含了其中的一部分。通过nltk.corpus.gutenberg.fileids()就可以查看包含了...

随便推点

机器学习中的文本处理_Shingle_的博客-程序员信息网_character n-grams

为了在文本文档中执行机器学习,我们首先需要将文本内容转换为数字特征向量。词袋模型简单有效,通过以下步骤将文本转化为数值向量 -&amp;amp;gt; (分词,计数,规范化和加权)局限性:不能涵盖词语间的关联关系不能正确捕捉否定关系不能捕捉短语和多词表达忽略了词序不能解释潜在的拼写错误或单词派生N-grams代替构建简单的unigrams集合(n=1),可以使用bigram...

python入门用spyder还是jupyter_Python开发环境Anaconda3使用指南(入门篇)_weixin_39637256的博客-程序员信息网

原标题:Python开发环境Anaconda3使用指南(入门篇)虽然说,我认为IDLE是世界上最美的Python开发环境,但是确实略显简陋,对Python内功(代码编写和调试)要求也高,并且每个扩展库都需要自己安装和配置,所以更多初学者和资深Python爱好者更偏向于使用Anaconda3、PyCharm或其他开发环境,而在众多Python开发环境中,Anaconda3因为集成安装大量扩展库,得到...

0-1背包问题_记录点滴1076的博客-程序员信息网

package com.bysj.common.算法;/** * 动态规划解决: * dp状态转移方程二维数组: * i:表示第i个物品,c代表剩余的容量,dp[][]的值表示当前价值 * int[i][c] dp = * if(w[i]&lt;c) * { * dp[i][c] = max(dp[i-1][c-w[i]]+v[i-1],dp[i-1][c]); * } ...

wine: ‘/home/zbw/.wine’ is a 64-bit installation, it cannot be used_帐1号1注1销1的博客-程序员信息网_wine is a 64-bit

wine:‘/home/zbw/.wine’isa64-bit installation,it cannot be used使用mv ~/.wine~/.wine64&amp;&amp; winecfg重新配置。

整理一下Java知识点_weixin_33958366的博客-程序员信息网

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

Unity基本组件—Collider_总都督的博客-程序员信息网_collider unity

组件介绍1.盒碰撞器(Box Collider)1.Edit Colloder:手动编辑Collider2.Is Trigger:是否为触发器3.Material:材质4.Center:碰撞器的中心点,相对于物体的自身坐标5.Size:碰撞器的大小2.椭圆碰撞器(Sphere Collider)1.Edit Colloder:手动编辑Collider2.Is Trigger:...

推荐文章

热门文章

相关标签