微信小程序是基于 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. 期望dp ---- E. Vasya and Magic Matrix(二维转一维+前缀和优化的期望dp)
  2. 数据结构(C语言版) 第二章 线性表 知识梳理+作业习题详解
  3. 公司间STO的Invoice处理
  4. linux date时间戳互相转换
  5. python lib head,使用Python 2中的urllib2发出HTTP HEAD请求
  6. wxWidgets:wxMutex类用法
  7. 6个重构方法提升80%的代码质量
  8. SwiftUI3优秀文章List 去掉左右间距问题
  9. php 微信支付md5签名,微信支付回调验证签名处理
  10. python获取文件夹里有什么文件+查看特定格式的文件
  11. 结对编程后传之做汉堡
  12. Mindomo Desktop for mac(思维导图软件)中文版
  13. 用户需求和分析——张有亮
  14. 修改AP6212A0所使用的配置文件nvram_ap6210.txt为nvram_ap6212.txt(分色排版)V1.2
  15. R语言统计—配对t检验样本量计算
  16. Linux中光盘使用的文件类型,Linux光盘行动之制作光盘
  17. iscsi没有可用于使用快速连接登陆的目标_【解密】5G商用在即 OPPO快速网络切换方法;高管宣布华为河图商标注册成功;小米折叠屏专利曝光 类似于摩托罗拉Razr...
  18. 应用图标变小及换图标不生效的问题
  19. 周边pd是什么意思_韩国综艺里经常说的VJ、PD是什么意思
  20. 8款惊艳的名牌概念手机,让市面流行的Iphone黯然失色

热门文章

  1. 特性(Attributes)
  2. 宣化科技职业学院计算机网络技术,职业技术学校专业建设-宣化科技职业技术学院-计算机网络技术.doc...
  3. PHP是TM最美的语言,我的文章是最棒的狗粮
  4. 计算机乱七八糟小知识备忘录
  5. 头条号:增加粉丝量 只需用四招!
  6. bim oracle,IBMS和BIM的融合之路
  7. 发版名词介绍(alpha,beta,RC,Release)
  8. 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度
  9. The package javax.swing is not accessible错误的三种解决办法,亲测有效
  10. 华为OD机试 - 消消乐游戏(Java JS Python)