微信小程序 MD5的方法详解及实例代码

微信小程序 MD5的方法详解

生成的文件可以放在  utils文件中哦!!!

/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Code also contributed by Greg Holt
 * See http://pajhome.org.uk/site/legal.html for details.
 */  

/*
 * 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)
 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
 return (msw << 16) | (lsw & 0xFFFF)
}  

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
 return (num << cnt) | (num >>> (32 - cnt))
}  

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function cmn(q, a, b, x, s, t)
{
 return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t)
{
 return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t)
{
 return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t)
{
 return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t)
{
 return cmn(c ^ (b | (~d)), a, b, x, s, t)
}  

/*
 * Calculate the MD5 of an array of little-endian words, producing an array
 * of little-endian words.
 */
function coreMD5(x)
{
 var a = 1732584193
 var b = -271733879
 var c = -1732584194
 var d = 271733878  

 for(var i = 0; i < x.length; i += 16)
 {
  var olda = a
  var oldb = b
  var oldc = c
  var oldd = d  

  a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
  d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
  c = ff(c, d, a, b, x[i+ 2], 17, 606105819)
  b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
  a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
  d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)
  c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
  b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
  a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)
  d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
  c = ff(c, d, a, b, x[i+10], 17, -42063)
  b = ff(b, c, d, a, x[i+11], 22, -1990404162)
  a = ff(a, b, c, d, x[i+12], 7 , 1804603682)
  d = ff(d, a, b, c, x[i+13], 12, -40341101)
  c = ff(c, d, a, b, x[i+14], 17, -1502002290)
  b = ff(b, c, d, a, x[i+15], 22, 1236535329)  

  a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
  d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
  c = gg(c, d, a, b, x[i+11], 14, 643717713)
  b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
  a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
  d = gg(d, a, b, c, x[i+10], 9 , 38016083)
  c = gg(c, d, a, b, x[i+15], 14, -660478335)
  b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
  a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)
  d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
  c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
  b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)
  a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
  d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
  c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)
  b = gg(b, c, d, a, x[i+12], 20, -1926607734)  

  a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
  d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
  c = hh(c, d, a, b, x[i+11], 16, 1839030562)
  b = hh(b, c, d, a, x[i+14], 23, -35309556)
  a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
  d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)
  c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
  b = hh(b, c, d, a, x[i+10], 23, -1094730640)
  a = hh(a, b, c, d, x[i+13], 4 , 681279174)
  d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
  c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
  b = hh(b, c, d, a, x[i+ 6], 23, 76029189)
  a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
  d = hh(d, a, b, c, x[i+12], 11, -421815835)
  c = hh(c, d, a, b, x[i+15], 16, 530742520)
  b = hh(b, c, d, a, x[i+ 2], 23, -995338651)  

  a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
  d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)
  c = ii(c, d, a, b, x[i+14], 15, -1416354905)
  b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
  a = ii(a, b, c, d, x[i+12], 6 , 1700485571)
  d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
  c = ii(c, d, a, b, x[i+10], 15, -1051523)
  b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
  a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)
  d = ii(d, a, b, c, x[i+15], 10, -30611744)
  c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
  b = ii(b, c, d, a, x[i+13], 21, 1309151649)
  a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
  d = ii(d, a, b, c, x[i+11], 10, -1120210379)
  c = ii(c, d, a, b, x[i+ 2], 15, 718787259)
  b = 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 hex string.
 */
function binl2hex(binarray)
{
 var hex_tab = "0123456789abcdef"
 var str = ""
 for(var i = 0; i < binarray.length * 4; i++)
 {
  str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
      hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
 }
 return str
}  

/*
 * Convert an array of little-endian words to a base64 encoded string.
 */
function binl2b64(binarray)
{
 var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
 var str = ""
 for(var i = 0; i < binarray.length * 32; i += 6)
 {
  str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
           ((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
 }
 return str
}  

/*
 * Convert an 8-bit character string to a sequence of 16-word blocks, stored
 * as an array, and append appropriate padding for MD4/5 calculation.
 * If any of the characters are >255, the high byte is silently ignored.
 */
function str2binl(str)
{
 var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
 var blks = new Array(nblk * 16)
 for(var i = 0; i < nblk * 16; i++) blks[i] = 0
 for(var i = 0; i < str.length; i++)
  blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
 blks[i>>2] |= 0x80 << ((i%4) * 8)
 blks[nblk*16-2] = str.length * 8
 return blks
}  

/*
 * Convert a wide-character string to a sequence of 16-word blocks, stored as
 * an array, and append appropriate padding for MD4/5 calculation.
 */
function strw2binl(str)
{
 var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
 var blks = new Array(nblk * 16)
 for(var i = 0; i < nblk * 16; i++) blks[i] = 0
 for(var i = 0; i < str.length; i++)
  blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
 blks[i>>1] |= 0x80 << ((i%2) * 16)
 blks[nblk*16-2] = str.length * 16
 return blks
}  

/*
 * External interface
 */
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/* Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
module.exports = {
 hexMD5: hexMD5
}

使用方式 :

var utilMd5 = require('../../utils/md5.js');
var password = utilMd5.hexMD5(password); 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 微信小程序 MD5加密登录密码详解及实例代码

    微信小程序 MD5加密 在小程序中,页面的脚本逻辑是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能在脚本中使用window,也无法在脚本中操作组件.zepto/jquery 也无法使用,因为zepto/jquery 会使用到window对象和document对象.所以在微信小程序中不能使用jquery.md5.js对密码进行加密.下面我提供一种MD5.js加密实例,本实例先静态演示,后面再到小程序中演示. md5.js程序如下: /* * A JavaScript impl

  • 微信小程序 MD5的方法详解及实例代码

    微信小程序 MD5的方法详解 生成的文件可以放在  utils文件中哦!!! /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002. * Code also contributed by Greg Holt

  • 微信小程序 http请求封装详解及实例代码

    微信小程序  http请求封装 示例代码 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, method:'POST', header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) }, fail: function( res ) { fail( res ); } }) 以上

  • 微信小程序 location API接口详解及实例代码

    微信小程序 location API 接口: 现在微信小程序火了 ,利用假期时间学习了下,微信小程序的基础知识,嘿嘿! 以下是记录学习微信小程序 location API接口,并且写了一个小实例来记录,如有错误之处还请指正. 微信小程序的位置接口共有两个: 1.wx.getLocation(OBJECT)获取当前的地理位置.速度. 2.wx.openLocation(OBJECT) 使用微信内置地图查看位置 然后,根据object参数说明,结合module模块化重写了下两个接口在暴露出来引用,让

  • 微信小程序  http请求封装详解及实例代码

    微信小程序  http请求封装 示例代码 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, method:'POST', header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) }, fail: function( res ) { fail( res ); } }) 以上

  • 微信小程序日历组件calendar详解及实例

    微信小程序日历组件calendar详解及实例 模版使用: src="../cal/calendar.wxml"> is="calendar" data="{{selected_value,days,month,years,lunar_years,lunar_month,lunar_days,selectDateType,l unar_selected_value}}"> JS代码使用: var Calendar = require('

  • 微信小程序 常用工具类详解及实例

    微信小程序 常用工具类详解 前言: 做微信小程序当中,会遇到好多的工具类util.js,这里记载下来以便平常使用 (Ps:建议通过目录查看) -获取日期(格式化) function formatTime(date) { var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinut

  • 微信 小程序前端源码详解及实例分析

    微信小程序前端源码逻辑和工作流 看完微信小程序的前端代码真的让我热血沸腾啊,代码逻辑和设计一目了然,没有多余的东西,真的是大道至简. 废话不多说,直接分析前端代码.个人观点,难免有疏漏,仅供参考. 文件基本结构: 先看入口app.js,app(obj)注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等.其他文件可以通过全局方法getApp()获取app实例,进而直接调用它的属性或方法,例如(getApp().globalData) //app.js App({ onLau

  • 微信小程序 audio音频播放详解及实例

     微信小程序 audio音频播放 audio audio为音频组件,我们可以轻松的在小程序中播放音频. 属性名 类型 默认值 说明 id String   video 组件的唯一标识符, src String   要播放音频的资源地址 loop Boolean false 是否循环播放 controls Boolean true 是否显示默认控件 poster String   默认控件上的音频封面的图片资源地址,如果 controls 属性值为 false 则设置 poster 无效 name

  • 微信小程序  audio音频播放详解及实例

     微信小程序 audio音频播放 audio audio为音频组件,我们可以轻松的在小程序中播放音频. 属性名 类型 默认值 说明 id String   video 组件的唯一标识符, src String   要播放音频的资源地址 loop Boolean false 是否循环播放 controls Boolean true 是否显示默认控件 poster String   默认控件上的音频封面的图片资源地址,如果 controls 属性值为 false 则设置 poster 无效 name

  • 微信小程序 Buffer缓冲区的详解

     微信小程序 Buffer缓冲区的详解 JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区. 在 node.js 中,Buffer 类是随 Node 内核一起发布的核心库.Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动

随机推荐