微信小程序 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 相关文章推荐
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
js 通过cookie实现刷新不变化树形菜单
Oct 30 Javascript
JavaScript调试工具汇总
Dec 23 Javascript
js运动动画的八个知识点
Mar 12 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
jQuery实现列表的增加和删除功能
Jun 14 jQuery
js实现动态增加文件域表单功能
Oct 22 Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
js 学习笔记(三)
2009/12/29 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
js表单登陆验证示例
2016/10/19 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
python检查指定文件是否存在的方法
2015/07/06 Python
浅谈五大Python Web框架
2017/03/20 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
【python】matplotlib动态显示详解
2019/04/11 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
使用python实现学生信息管理系统
2021/02/25 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
会计实训总结范文
2015/08/03 职场文书
高中军训感想
2015/08/07 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang