微信小程序 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的web页面日期格式化插件
Nov 15 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
关于JS中的闭包浅谈
Aug 23 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
Mar 18 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 Javascript
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
详解react内联样式使用webpack将px转rem
Sep 13 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
bootstrap Table实现合并相同行
Jul 19 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 变量的定义方法
2010/01/26 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
php简单实现MVC
2015/02/05 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
PHP实现简单的计算器
2020/08/28 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
EL表达式截取字符串的函数说明
2017/09/22 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python操作csv文件实例详解
2017/07/31 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
采购人员的个人自我评价
2014/01/16 职场文书
保险专业求职信
2014/07/07 职场文书
个人务虚会发言材料
2014/10/20 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014年督导工作总结
2014/11/19 职场文书
认真学习保证书
2015/02/26 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python