微信小程序 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 相关文章推荐
ASP Json Parser修正版
Dec 06 Javascript
js Event对象的5种坐标
Sep 12 Javascript
分页栏的web标准实现
Nov 01 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
JavaScript函数详解
Nov 17 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
Angular实现下载安装包的功能代码分享
Sep 05 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 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验证码函数的使用示例
2013/05/03 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python实现画圆功能
2018/01/25 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python标识符命名规范原理解析
2020/01/10 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
爱我中华教学反思
2014/04/28 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
博士生专家推荐信
2015/03/25 职场文书
羊脂球读书笔记
2015/06/30 职场文书
毕业欢送会致辞
2015/07/29 职场文书
Python软件包安装的三种常见方法
2022/07/07 Python