微信小程序 sha1 实现密码加密实例详解


Posted in Javascript onJuly 06, 2017

微信小程序 sha1 实现密码加密实例详解

在utils中的util.js 文件中增加 函数 实现 字符串转换为16进制加密后的字符串

function encodeUTF8(s) {
 var i, r = [], c, x;
 for (i = 0; i < s.length; i++)
  if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
  else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
  else {
   if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
    c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
     r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
   else r.push(0xE0 + (c >> 12 & 0xF));
   r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
  };
 return r;
};

// 字符串加密成 hex 字符串
function sha1(s) {
 var data = new Uint8Array(encodeUTF8(s))
 var i, j, t;
 var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
 s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
 for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
 s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
 s[l - 1] = data.length << 3;
 var w = [], f = [
  function () { return m[1] & m[2] | ~m[1] & m[3]; },
  function () { return m[1] ^ m[2] ^ m[3]; },
  function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
  function () { return m[1] ^ m[2] ^ m[3]; }
 ], rol = function (n, c) { return n << c | n >>> (32 - c); },
  k = [1518500249, 1859775393, -1894007588, -899497514],
  m = [1732584193, -271733879, null, null, -1009589776];
 m[2] = ~m[0], m[3] = ~m[1];
 for (i = 0; i < s.length; i += 16) {
  var o = m.slice(0);
  for (j = 0; j < 80; j++)
   w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
    t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
    m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
  for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
 };
 t = new DataView(new Uint32Array(m).buffer);
 for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);

 var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
  return (e < 16 ? "0" : "") + e.toString(16);
 }).join("");

 return hex;
};

导出函数

module.exports = {
 formatTime: formatTime,
 sha1:sha1
}

这样就可以在其他页面中调用了

var util = require('../../utils/util.js')
util.sha1("123456")

 以 密码为  123456 作为示例,在线加密结果

微信小程序 sha1 实现密码加密实例详解

小程序中调用结果

微信小程序 sha1 实现密码加密实例详解

加密结果是相同的

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

Javascript 相关文章推荐
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
深入解析JavaScript编程中的this关键字使用
Nov 09 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
vue之nextTick全面解析
May 17 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
了解前端理论:rscss和rsjs
May 23 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
Feb 12 Javascript
AngularJS学习笔记之表单验证功能实例详解
Jul 06 #Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 #Javascript
AngularJS常见过滤器用法实例总结
Jul 06 #Javascript
Vue学习之路之登录注册实例代码
Jul 06 #Javascript
AngularJS中ng-class用法实例分析
Jul 06 #Javascript
jQuery 实现图片的依次加载图片功能
Jul 06 #jQuery
JS图片轮播与索引变色功能实例详解
Jul 06 #Javascript
You might like
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
详解webpack 最简打包结果分析
2019/02/20 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
微信跳一跳python代码实现
2018/01/05 Python
Python实现批量压缩图片
2018/01/25 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
python字符串常用方法
2018/06/14 Python
python实现多张图片拼接成大图
2019/01/15 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
python如何调用字典的key
2020/05/25 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
大学社团活动策划书
2014/01/26 职场文书
生物学专业求职信
2014/07/23 职场文书
公司备用金管理制度
2015/08/04 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
离婚协议书范文2016
2016/03/18 职场文书
2019经典广告词集锦!
2019/07/02 职场文书