微信小程序 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 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
原生JS获取元素的位置与尺寸实现方法
Oct 18 Javascript
Vue2 SSR渲染根据不同页面修改 meta
Nov 20 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
js中null与空字符串&quot;&quot;的区别讲解
Jan 17 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
Sep 05 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
php _autoload自动加载类与机制分析
2012/02/10 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
php对象工厂类完整示例
2018/08/09 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
python爬取51job中hr的邮箱
2016/05/14 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
总经理助理岗位职责
2013/11/08 职场文书
教师档案管理制度
2014/01/23 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
php引用传递
2021/04/01 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP