写过 js混淆器,谈一些浅显的个人看法。

个人认为,js的不可读化处理分为三个方面:压缩(compression)混淆(obfuscation)加密(encryption)。(不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换, 都可以这么叫,“增加代码不可读性”可能是代码转换的结果或者目的).

1. 压缩

这一操作的目的,是让最终代码传输量 (不代表代码量, 也不代表文件体积)尽可能小。压缩js的工具,常见的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。

通常在代码压缩的过程中,只改变代码的语法,代码的语义和控制流不会有太大改变

常见做法是把局部变量缩短化,把一些运算进行等价替换等。代码压缩对于代码保护有一些帮助,但由于语义和控制流基本没变,起不了太大作用

在压缩层面上,代码不可读只是一种附带伤害,不是最终目的。

2. 混淆

这一操作的目的,是让代码尽可能地不可读,主要用作代码保护。

让代码不可读,增加分析的难度,这是唯一目的。混淆过后文件体积变大一倍也没关系,代码量变多也没关系,运算慢50% 也没关系。

常见的做法有:分离常量、打乱控制流、增加无义代码、检查运行环境如果不对就罢工,等等。

在混淆层面上,代码不可读是最终目的。

值得一提的是,Google Closure Compiler 的 Advance Level Compression 会压缩类和对象的成员,其压缩结果很难分析,也可以认为是一种混淆,但兼容性不太好。

相关工具:

  1. 在线JS压缩工具,里面有标识符混淆选项。JS压缩:https://www.css-js.com/

  2. UglifyJS:http://lisperator.net/uglifyjs/
    一般UglifyJS都集成到前端工具当中去使用,比如grunt,在配置UglifyJS中可以选择是否混淆;

  3. YUI compressor  :https://github.com/yui/yuicompressor

  4. 还有JSPacker、JsMin等工具。

3. 加密

说实话我很难对加密做一个定义,因为加密在Web界有太多歧义了。

有加密就有解密,意味着加密操作可逆,密文可以明文化

就这样看来,在Web界,可以称之为加密的东西包括:HTTPS传输、JavaScript实现对称加密或者不对称加密等等。

这样看来,不可逆的代码压缩和混淆就不能列入加密这个范畴了。

非要找一个可以称之为加密,又经常被人误解为压缩和混淆的东西,Dean Edwards 的 Dean Packer/Unpacker 可以拿来做个例子。

比如我们把

var num=1;alert(num);

输入 Dean Packer,pack 一下,得到这么一串东西,是不是看着非常像被压缩和混淆过的代码?

image

把上面那串意义不明物拿来 unpack 一下,得到了原文。

image

实际上 Dean Packer 只是对源码进行了一个字符串变换,没有深入到代码语法层面,你可以拿 "Hello world, 你好师姐" 来试试。

image

用Online JavaScript beautifier 能轻松把这串东西还原为 “Hello world, 你好师姐”。

可以看出,代码加密意味着:将代码明文进行可逆的变换(加密),生成密文;将密文进行逆变换(解密),可以还原明文;最终运行环境运行的是解密代码

结语

实际上大家对压缩、混淆、加密这三个概念还是挺不清晰的,我在这里说一些个人见解,希望有帮助。

在现实项目中,我是多种手段结合的:

  • 对于不需要做代码保护的项目,比如个人博客,做代码压缩,加快载入速度,这就够了。

  • 对于需要做一些代码保护,防止抄袭的项目,可以在源码中加入一些开发者的信息和防护代码,然后混淆和压缩。很不幸的是,我这方面总是做得不太好,防君子防不了小人啊哈哈。

  • 对于需要严格加密的项目,可以用 混淆、压缩、加密、签名检查 等多种手段,这我就不清楚了,等大婶来补充。

前端JS都是用什么加密的?相关推荐

  1. 前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密

    RSA 加密算法简介 一种比较常见的非对称加密算法,常用于前后端交互中的密码加密,前端使用公钥加密密码,后端使用私钥进行解密.公钥可对外开放,私钥是存放在服务端,外部正常情况下是拿不到解密私钥的. 以 ...

  2. 如何保护前端JS代码?前端js代码加密

    Web前端JS代码需要保护吗? 这得具体情况具体分析. 1.如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能.那不需要保护. 2.如果是精心设计一个绚丽的特效,如果想要保护这段自己付 ...

  3. aes前端js加密及后台解密

    1. 加载js <script src="https://cx-a.com/zy/js/aes.js"></script> <script src=& ...

  4. web前端干货:详细了解JS前端开发框架都有哪些

    1. Foundation框架 Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,尝试处理你项目中的一切所需.Fo ...

  5. 你不知道的javascript_为什么前端要学JavaScript?JS都有哪些逆天的功能?

    相信每一个想要学习前端的人对于前端三剑客html+css+js都不会陌生,这些可以说是一个前端的标配,而在前端的世界里,没有什么是JavaScript实现不了的,你真的了解js吗? 关于JS有一句话: ...

  6. Python反反爬系列(四)----前端JS进行AES加密,Python解密

    将6位或者7位数字加密成22位数字字母大小写的加密方法. 采集数据时,遇到对Url进行加密的网站,大致加密情形如下 1.编译加密前的url 在列表页的url如下 2.加密后的Url 除了端口这块没了, ...

  7. 利用jsjiami一键加密前端JS

    公司丢公网的某个项目,最近接口一直被爬虫困扰,经常被爬虫爬瘫痪,打举报电话短时间也无果.后来想到可以通过参数加密+前端代码js加密+防火墙策略来解决. 然后看了下市面上的加密方案,搜js加密排行首位的 ...

  8. 来自未来,2022 年的前端人都在做什么?

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. 前端 js实现模糊搜索

    前端 js实现模糊搜索 template <input type="text" v-model="keyWord" @input="fuzzyQ ...

最新文章

  1. 100页精华PPT,帮你彻底看懂5G!
  2. 2.3.3 浮点数的加减运算与强制类型转换
  3. Base64 + 变为 空格 问题分析
  4. android 崩溃捕获_Android从相机和图库捕获图像
  5. 4.7 ResNet CNN、tensorflow实现——python实战
  6. linux apache 依赖包,利用 yum 解决 Linux 软件包的依赖关系
  7. kali翻译插件_Kali2.0上的一款翻译神器【GoldenDict神器介绍】
  8. 派工单系统 源码_「VIP报修云」报修工单进度通知方法
  9. 《今日简史》--重新认识自己:人类心智的奥秘
  10. iOS-App移交(更换app开发者账号)
  11. SSL证书会不会过期?域名SSL证书过期了怎么办?
  12. vue 生成二维码海报并进行微信分享
  13. FileOutputStream、OutputStreamWriter、BufferedWriter的区别和用法
  14. 杜拉拉升职记-选段-如何来定位一家公司以及所谓的中产阶级生活
  15. 7070mt安装ubuntu dell_戴尔(dell)7070MT台式机装win7系统及分区教程(支持usb驱动)
  16. python编写程序解方程_用Python解方程
  17. 英特尔Rupal Shah: 高性能计算走向平民化
  18. DeviceNet概要
  19. CSS3JavaScript 电池充电
  20. 严格反馈系统的反演控制的新框架

热门文章

  1. androidstudio基于mob平台实现手机号验证
  2. 【Designing ML Systems】第 1 章 :机器学习系统概述
  3. 每日一题:由卢卡斯队列引出java四舍五入
  4. 同一个浏览器登录不同账号_亚马逊又搞事情了!再来一波被关联封杀的账号,这些问题你不得不知道!...
  5. 在线教学app开发六要素是什么?
  6. 基于轨迹优化的自动驾驶汽车跟随自行车模型动力学控制(Matlab代码实现)
  7. 迪杰斯特拉算法 图(邻接矩阵)实现
  8. (转)对冲基金之王科恩,天才还是魔鬼?——读《黑色优势》有感
  9. 关于机器学习全流程溯源管理的思考
  10. 高精度胎压表气压计方案定制