微信小程序 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 相关文章推荐
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
Jun 05 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
AngularJS快速入门
Apr 02 Javascript
JavaScript实现点击按钮直接打印
Jan 06 Javascript
js插件dropload上拉下滑加载数据实例解析
Jul 27 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
基于jQuery的checkbox全选问题分析
Nov 18 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
swiper 解决动态加载数据滑动失效的问题
Feb 26 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
用php解析html的实现代码
2011/08/08 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
求职自荐书范文
2013/12/04 职场文书
教师节商场活动方案
2014/02/13 职场文书
学生安全教育材料
2014/02/14 职场文书
周年庆典主持词
2014/04/02 职场文书
病媒生物防治方案
2014/05/13 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
golang使用map实现去除重复数组
2022/04/14 Golang
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android