微信小程序 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 相关文章推荐
javascript不同页面传值的改进版
Sep 30 Javascript
javascript 多级checkbox选择效果
Aug 20 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
使用jquery mobile做幻灯播放效果实现步骤
Jan 04 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
JavaScript中数组Array方法详解
Feb 27 Javascript
ES6中的rest参数与扩展运算符详解
Jul 18 Javascript
5分钟快速掌握JS中var、let和const的异同
Sep 19 Javascript
js实现头像上传并且可预览提交
Dec 25 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
在项目中寻找代码的坏命名
2012/07/14 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
让焦点自动跳转
2006/07/01 Javascript
浅析js封装和作用域
2013/07/09 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
Angular6封装http请求的步骤详解
2018/08/13 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
Python实现字符串格式化的方法小结
2017/02/20 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
python字符串Intern机制详解
2019/07/01 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
struct和class的区别
2015/11/20 面试题
在C#中如何实现多态
2014/07/02 面试题
linux面试题参考答案(8)
2016/04/19 面试题
敬老文明号事迹材料
2014/01/16 职场文书
安全技术说明书
2014/05/09 职场文书
2014年药房工作总结
2014/11/22 职场文书
科级干部培训心得体会
2016/01/06 职场文书
信息技术课教学反思
2016/02/23 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python