前端JS都是用什么加密的?
写过 js混淆器,谈一些浅显的个人看法。
个人认为,js的不可读化处理分为三个方面:压缩(compression)、混淆(obfuscation) 和加密(encryption)。(不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换, 都可以这么叫,“增加代码不可读性”可能是代码转换的结果或者目的).
1. 压缩
这一操作的目的,是让最终代码传输量 (不代表代码量, 也不代表文件体积)尽可能小。压缩js的工具,常见的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。
通常在代码压缩的过程中,只改变代码的语法,代码的语义和控制流不会有太大改变。
常见做法是把局部变量缩短化,把一些运算进行等价替换等。代码压缩对于代码保护有一些帮助,但由于语义和控制流基本没变,起不了太大作用。
在压缩层面上,代码不可读只是一种附带伤害,不是最终目的。
2. 混淆
这一操作的目的,是让代码尽可能地不可读,主要用作代码保护。
让代码不可读,增加分析的难度,这是唯一目的。混淆过后文件体积变大一倍也没关系,代码量变多也没关系,运算慢50% 也没关系。
常见的做法有:分离常量、打乱控制流、增加无义代码、检查运行环境如果不对就罢工,等等。
在混淆层面上,代码不可读是最终目的。
值得一提的是,Google Closure Compiler 的 Advance Level Compression 会压缩类和对象的成员,其压缩结果很难分析,也可以认为是一种混淆,但兼容性不太好。
相关工具:
在线JS压缩工具,里面有标识符混淆选项。JS压缩:https://www.css-js.com/
UglifyJS:http://lisperator.net/uglifyjs/
一般UglifyJS都集成到前端工具当中去使用,比如grunt,在配置UglifyJS中可以选择是否混淆;YUI compressor :https://github.com/yui/yuicompressor
还有JSPacker、JsMin等工具。
3. 加密
说实话我很难对加密做一个定义,因为加密在Web界有太多歧义了。
有加密就有解密,意味着加密操作可逆,密文可以明文化。
就这样看来,在Web界,可以称之为加密的东西包括:HTTPS传输、JavaScript实现对称加密或者不对称加密等等。
这样看来,不可逆的代码压缩和混淆就不能列入加密这个范畴了。
非要找一个可以称之为加密,又经常被人误解为压缩和混淆的东西,Dean Edwards 的 Dean Packer/Unpacker 可以拿来做个例子。
比如我们把
var num=1;alert(num);
输入 Dean Packer,pack 一下,得到这么一串东西,是不是看着非常像被压缩和混淆过的代码?
把上面那串意义不明物拿来 unpack 一下,得到了原文。
实际上 Dean Packer 只是对源码进行了一个字符串变换,没有深入到代码语法层面,你可以拿 "Hello world, 你好师姐" 来试试。
用Online JavaScript beautifier 能轻松把这串东西还原为 “Hello world, 你好师姐”。
可以看出,代码加密意味着:将代码明文进行可逆的变换(加密),生成密文;将密文进行逆变换(解密),可以还原明文;最终运行环境运行的是解密代码。
结语
实际上大家对压缩、混淆、加密这三个概念还是挺不清晰的,我在这里说一些个人见解,希望有帮助。
在现实项目中,我是多种手段结合的:
对于不需要做代码保护的项目,比如个人博客,做代码压缩,加快载入速度,这就够了。
对于需要做一些代码保护,防止抄袭的项目,可以在源码中加入一些开发者的信息和防护代码,然后混淆和压缩。很不幸的是,我这方面总是做得不太好,防君子防不了小人啊哈哈。
对于需要严格加密的项目,可以用 混淆、压缩、加密、签名检查 等多种手段,这我就不清楚了,等大婶来补充。
前端JS都是用什么加密的?相关推荐
- 前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密
RSA 加密算法简介 一种比较常见的非对称加密算法,常用于前后端交互中的密码加密,前端使用公钥加密密码,后端使用私钥进行解密.公钥可对外开放,私钥是存放在服务端,外部正常情况下是拿不到解密私钥的. 以 ...
- 如何保护前端JS代码?前端js代码加密
Web前端JS代码需要保护吗? 这得具体情况具体分析. 1.如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能.那不需要保护. 2.如果是精心设计一个绚丽的特效,如果想要保护这段自己付 ...
- aes前端js加密及后台解密
1. 加载js <script src="https://cx-a.com/zy/js/aes.js"></script> <script src=& ...
- web前端干货:详细了解JS前端开发框架都有哪些
1. Foundation框架 Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,尝试处理你项目中的一切所需.Fo ...
- 你不知道的javascript_为什么前端要学JavaScript?JS都有哪些逆天的功能?
相信每一个想要学习前端的人对于前端三剑客html+css+js都不会陌生,这些可以说是一个前端的标配,而在前端的世界里,没有什么是JavaScript实现不了的,你真的了解js吗? 关于JS有一句话: ...
- Python反反爬系列(四)----前端JS进行AES加密,Python解密
将6位或者7位数字加密成22位数字字母大小写的加密方法. 采集数据时,遇到对Url进行加密的网站,大致加密情形如下 1.编译加密前的url 在列表页的url如下 2.加密后的Url 除了端口这块没了, ...
- 利用jsjiami一键加密前端JS
公司丢公网的某个项目,最近接口一直被爬虫困扰,经常被爬虫爬瘫痪,打举报电话短时间也无果.后来想到可以通过参数加密+前端代码js加密+防火墙策略来解决. 然后看了下市面上的加密方案,搜js加密排行首位的 ...
- 来自未来,2022 年的前端人都在做什么?
大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- 前端 js实现模糊搜索
前端 js实现模糊搜索 template <input type="text" v-model="keyWord" @input="fuzzyQ ...
最新文章
- 100页精华PPT,帮你彻底看懂5G!
- 2.3.3 浮点数的加减运算与强制类型转换
- Base64 + 变为 空格 问题分析
- android 崩溃捕获_Android从相机和图库捕获图像
- 4.7 ResNet CNN、tensorflow实现——python实战
- linux apache 依赖包,利用 yum 解决 Linux 软件包的依赖关系
- kali翻译插件_Kali2.0上的一款翻译神器【GoldenDict神器介绍】
- 派工单系统 源码_「VIP报修云」报修工单进度通知方法
- 《今日简史》--重新认识自己:人类心智的奥秘
- iOS-App移交(更换app开发者账号)
- SSL证书会不会过期?域名SSL证书过期了怎么办?
- vue 生成二维码海报并进行微信分享
- FileOutputStream、OutputStreamWriter、BufferedWriter的区别和用法
- 杜拉拉升职记-选段-如何来定位一家公司以及所谓的中产阶级生活
- 7070mt安装ubuntu dell_戴尔(dell)7070MT台式机装win7系统及分区教程(支持usb驱动)
- python编写程序解方程_用Python解方程
- 英特尔Rupal Shah: 高性能计算走向平民化
- DeviceNet概要
- CSS3JavaScript 电池充电
- 严格反馈系统的反演控制的新框架
热门文章
- androidstudio基于mob平台实现手机号验证
- 【Designing ML Systems】第 1 章 :机器学习系统概述
- 每日一题:由卢卡斯队列引出java四舍五入
- 同一个浏览器登录不同账号_亚马逊又搞事情了!再来一波被关联封杀的账号,这些问题你不得不知道!...
- 在线教学app开发六要素是什么?
- 基于轨迹优化的自动驾驶汽车跟随自行车模型动力学控制(Matlab代码实现)
- 迪杰斯特拉算法 图(邻接矩阵)实现
- (转)对冲基金之王科恩,天才还是魔鬼?——读《黑色优势》有感
- 关于机器学习全流程溯源管理的思考
- 高精度胎压表气压计方案定制