微信小程序 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 相关文章推荐
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
JavaScript跨域方法汇总
Oct 16 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
安装vue-cli报错 -4058 的解决方法
Oct 19 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 Javascript
JavaScript实现消消乐的源代码
Jan 12 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 get_meta_tags()函数
2014/05/12 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
JavaScript类库D
2010/10/24 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
vue自动化路由的实现代码
2019/09/30 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
django中send_mail功能实现详解
2018/02/06 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
护士的自我鉴定
2014/02/07 职场文书
火车来了教学反思
2014/02/11 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技