微信小程序是基于 js 进行封装的,所以,本质上是 js 的 MD5 加密

一个问题是,我后台服务器用的是 Python,js 和 Python 会有 MD5 密文不一致的情况

具体参考:https://segmentfault.com/q/1010000009285922

网上可以下载到很多第三方的 MD5 包,但是微信小程序和 js 还是不同的,需要稍微的进行改造

/** JavaScript MD5 1.0.1* https://github.com/blueimp/JavaScript-MD5** Copyright 2011, Sebastian Tschan* https://blueimp.net** Licensed under the MIT license:* http://www.opensource.org/licenses/MIT* * Based on* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message* Digest Algorithm, as defined in RFC 1321.* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet* Distributed under the BSD License* See http://pajhome.org.uk/crypt/md5 for more info.*//*jslint bitwise: true */
/*global unescape, define *//** Add integers, wrapping at 2^32. This uses 16-bit operations internally* to work around bugs in some JS interpreters.*/function safe_add(x, y) {var lsw = (x & 0xFFFF) + (y & 0xFFFF),msw = (x >> 16) + (y >> 16) + (lsw >> 16);return (msw << 16) | (lsw & 0xFFFF);}/** Bitwise rotate a 32-bit number to the left.*/function bit_rol(num, cnt) {return (num << cnt) | (num >>> (32 - cnt));}/** These functions implement the four basic operations the algorithm uses.*/function md5_cmn(q, a, b, x, s, t) {return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);}function md5_ff(a, b, c, d, x, s, t) {return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);}function md5_gg(a, b, c, d, x, s, t) {return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);}function md5_hh(a, b, c, d, x, s, t) {return md5_cmn(b ^ c ^ d, a, b, x, s, t);}function md5_ii(a, b, c, d, x, s, t) {return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);}/** Calculate the MD5 of an array of little-endian words, and a bit length.*/function binl_md5(x, len) {/* append padding */x[len >> 5] |= 0x80 << (len % 32);x[(((len + 64) >>> 9) << 4) + 14] = len;var i, olda, oldb, oldc, oldd,a = 1732584193,b = -271733879,c = -1732584194,d = 271733878;for (i = 0; i < x.length; i += 16) {olda = a;oldb = b;oldc = c;oldd = d;a = md5_ff(a, b, c, d, x[i], 7, -680876936);d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);b = md5_gg(b, c, d, a, x[i], 20, -373897302);a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);d = md5_hh(d, a, b, c, x[i], 11, -358537222);c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);a = md5_ii(a, b, c, d, x[i], 6, -198630844);d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);a = safe_add(a, olda);b = safe_add(b, oldb);c = safe_add(c, oldc);d = safe_add(d, oldd);}return [a, b, c, d];}/** Convert an array of little-endian words to a string*/function binl2rstr(input) {var i,output = '';for (i = 0; i < input.length * 32; i += 8) {output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);}return output;}/** Convert a raw string to an array of little-endian words* Characters >255 have their high-byte silently ignored.*/function rstr2binl(input) {var i,output = [];output[(input.length >> 2) - 1] = undefined;for (i = 0; i < output.length; i += 1) {output[i] = 0;}for (i = 0; i < input.length * 8; i += 8) {output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);}return output;}/** Calculate the MD5 of a raw string*/function rstr_md5(s) {return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));}/** Calculate the HMAC-MD5, of a key and some data (raw strings)*/function rstr_hmac_md5(key, data) {var i,bkey = rstr2binl(key),ipad = [],opad = [],hash;ipad[15] = opad[15] = undefined;if (bkey.length > 16) {bkey = binl_md5(bkey, key.length * 8);}for (i = 0; i < 16; i += 1) {ipad[i] = bkey[i] ^ 0x36363636;opad[i] = bkey[i] ^ 0x5C5C5C5C;}hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));}/** Convert a raw string to a hex string*/function rstr2hex(input) {var hex_tab = '0123456789abcdef',output = '',x,i;for (i = 0; i < input.length; i += 1) {x = input.charCodeAt(i);output += hex_tab.charAt((x >>> 4) & 0x0F) +hex_tab.charAt(x & 0x0F);}return output;}/** Encode a string as utf-8*/function str2rstr_utf8(input) {return unescape(encodeURIComponent(input));}/** Take string arguments and return either raw or hex encoded strings*/function raw_md5(s) {return rstr_md5(str2rstr_utf8(s));}function hex_md5(s) {return rstr2hex(raw_md5(s));}function raw_hmac_md5(k, d) {return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));}function hex_hmac_md5(k, d) {return rstr2hex(raw_hmac_md5(k, d));}function md5(string, key, raw) {if (!key) {if (!raw) {return hex_md5(string);}return raw_md5(string);}if (!raw) {return hex_hmac_md5(key, string);}return raw_hmac_md5(key, string);}module.exports = {md5: md5
}

具体使用:

var key = require('../../utils/md5.js');
tokenKey = key.md5(_tokenKey);

参考文章:https://blog.csdn.net/qq_27626333/article/details/53634897

微信小程序:MD5 加密相关推荐

  1. 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)

    2019独角兽企业重金招聘Python工程师标准>>> 开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持 ...

  2. 微信小程序-MD5加密

    签名串:按照接口中定义的参数名按首字母(首字母相同看第二个字母,依此类推)顺序进行排列,将所有参数值(除了 hmac)按照上面的排序通过key=value&方式连接起来,加密方式为MD5. 第 ...

  3. 微信小程序md5加密支持中文和特殊字符

    微信小程序默认的md5加密不支持中文和特殊符号,如果需要支持,需要引入md5加密.也是npm包,可在js和nodejs引入 或者使用cdn(https://cdn.bootcss.com/blueim ...

  4. 微信小程序 AES加密ECB模式

    微信小程序 AES加密网上大部分是CBC模式,但是java后台用的是ECB模式 ECB模式 js文件下载 下载链接 (有好多写着ECB模式,但是下载了还是CBC的,可恨-) 下面展示一下两种模式解密结 ...

  5. 微信小程序--sha1加密元素以字典顺序排序微信小程序接入微信公众平台

    java--sha1加密 算法实现 bytes[i] & 0xFF 原理详解 以字典顺序排序 php----$_GET[] http认证中的nonce与timestamp token和nonc ...

  6. 微信小程序AES加密解密

    微信小程序  其实在调用一些第三方 js的时候 其实没有大家想的那么复杂,无非就是把原生js调用方式   改为微信小程序 js调用方式 废话不多说直接贴代码 其实就是将原生function 或者 对象 ...

  7. 微信小程序RSA加密与 Java RSA加密结果相同

    业务需要,小程序上送到后台的数据需要使用RSA加密,后台返回的数据需要RSA解密.折腾了好久,微信小程序的加解密结果始终不一样.终于解决这问题记录一下. PS:后续使用过程中,发现小程序加密内容过长的 ...

  8. 微信小程序如何加密?

    随着微信的用户量基础越来越大,小程序越来越成熟,很多线上教育或者视频播放都可以使用小程序实现.不过对于视频版权者来说如何保护自有版权视频的安全性是还是必须要考虑的.那么小程序播放视频能不能做加密呢? ...

  9. 微信小程序 php解密,微信小程序des加密、PHP des解密

    最近在做对小程序传输数据进行加密,加密方法有很多,使用的是des对称加密 采用的是CBC模式, 需要传入内容,密钥,初始化向量3个参数 var server = require('../../util ...

  10. 微信小程序ras加密(比如密码加密)

    1.小程序公共js文件引入wx_rsa.js文件   下载地址:https://download.csdn.net/download/huanhunacsdn/10433043 2.自己写的js va ...

最新文章

  1. css3伪元素选择器before 和 after 的使用
  2. 趋势线突破有效的标志
  3. Linux 下zip包的压缩与解压
  4. 2015第26周六《谁动了我的奶酪》书摘
  5. UA MATH565C 随机微分方程V 算子半群理论简介
  6. 寻根求源 U盘的9个典型故障
  7. c++Cocktail Selection Sort鸡尾酒选择排序的实现算法(附完整源码)
  8. kbone-cli初始化项目,提示‘模板xx不存在’
  9. [2020.10.30NOIP模拟赛]小鱼吃大鱼【RMQ】
  10. 【渝粤教育】国家开放大学2018年春季 0699-22T阅读与写作 参考试题
  11. jQuery选择器总结[转]
  12. (44)VHDL实现多路复用器(if-else)
  13. linux文件存储结构,Linux文件存储方式以及软硬链接
  14. sqlite 查看数据库表和字段
  15. 详解Unity中的射线与射线检测
  16. 8.21: Hackday、慈善x快速迭代
  17. 互联网造车最靠谱的方式是合作
  18. 微服务实施笔记(五)——生产环境部署
  19. 任正非:实事求是的科研方向与二十年的艰苦努力(新年推荐)
  20. SNIP的升级版SNIPER(效果比Mosaic更佳)

热门文章

  1. 苹果iOS/iPadOS 15.2 Beta 1发布 app隐私报告?
  2. 打游戏的利器来了!配置再也不是限制我吃鸡的理由!
  3. java生成圆形二维码logo
  4. 关于指针所占的字节数
  5. 推荐几个经常发干货的公众号
  6. 读《富爸爸,穷爸爸》后感(三)
  7. PaaS 平台学习(开源力量OSF)构建千万级大规模、高可靠PaaS平台的技术挑战 学习笔记
  8. python七段数码管绘制实验报告_python实现七段数码管和倒计时效果
  9. 机器学习之决策树算法前期(创建、分类及展示)
  10. 基于小波分析和机器学习的时间序列分析与识别