JS通过位运算实现权限加解密


Posted in Javascript onAugust 14, 2018

首先介绍一下js中的位运算:

1. "&" :与运算,转化为二进制数,如果相同位数都为1则得结果为1,否则为0;

2. "|" :或运算,转化为二进制数,如果相同位数只要有一个为1则得结果为1,否则为0;

3. "^" :异或运算,转化为二进制数,如果相同位数不同则得结果为1,否则为0;

4."<<" 异位运算符,1<<1,表示将1左移一位,也就是010,在二进制中代表2;

顺便说一下,十进制数字互相转化。

十进制转为别的进制:

var num = 123;
console.log(num.toString(2))
console.log(num.toString(8))//参数传想要转化的位数

别的进制转化为十进制:

var num = 110;
console.log(parseInt(num,2))//二进制转化为十进制

假设我们现在有5项权限,在二进制中用1代表拥有权限,0代表不拥有。所以11111这样代表拥有所有的五项权限,那么我们如何知道用户是否有某一项具体权限呢。

比如,我们现在想检测用户是否有第一项权限,我们首先用过异位 1 << 0,向左移0位,还是1,然后1 & (Math.pow(2,5) -1),

如果返回0,说明个位对不上,也就是说我们当前没有权限,如果返回1,说明我们拥有第一项权限,同理,如果需要检验第二位权限,只需要异位2就好了。

if((1 << 0) & (Math.pow(2,5) - 1) !== 0){
  //拥有第一项权限权限
}
if((1 << 1) & (Math.pow(2,5) - 1) !== 0){
  //拥有第一项权限权限
}

总结

以上所述是小编给大家介绍的JS通过位运算实现权限加解密,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript获取dom的下一个节点方法
Sep 05 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
Sep 04 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
js根据需要计算数组中重复出现某个元素的个数
Jan 18 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
vue实现跨域的方法分析
May 21 Javascript
js实现图片实时时钟
Jan 15 Javascript
js实现简单的打印表格
Jan 15 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 Javascript
js中getter和setter用法实例分析
Aug 14 #Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 #Javascript
Vue.js单向绑定和双向绑定实例分析
Aug 14 #Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 #Javascript
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 #jQuery
jQuery+CSS实现的标签页效果示例【测试可用】
Aug 14 #jQuery
layui的table单击行勾选checkbox功能方法
Aug 14 #Javascript
You might like
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
php 猴子摘桃的算法
2017/06/20 PHP
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
南威尔士家居商店:Leekes
2016/10/25 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
实体的生命周期
2013/08/31 面试题
中文专业毕业生自荐信
2013/10/28 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
超市创业计划书
2014/04/24 职场文书
综治宣传月活动总结
2014/04/28 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
捐助倡议书
2015/01/19 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL