壓縮js的原理
㈠ JS代碼壓縮
本文分享一種用於實現JS代碼壓縮的技術。該技術基於LZW演算法,通過建立一個字元串表,用較短的代碼表示較長的字元串來實現壓縮。
具體實現方法是:提取原始文本文件中的不同字元,根據這些字元創建動態編譯表。用編譯表中的字元索引替代原始數據中的字元,從而減小文件大小。在解碼時,需要從已編碼數據中還原出原來的編譯表。
使用JavaScript實現LZW演算法,可以壓縮和解壓JS代碼。運行效果展示,解壓後的代碼運行,實現原始功能。
在實際應用中,為了保護演算法不被他人知悉,可以進一步對代碼進行混淆加密。例如,通過工具如JShaman加密代碼,形成混淆的代碼形式。
加密後的JS代碼仍能運行,完全不影響使用,與未加密狀態一致。通過這一系列操作,有效實現JS代碼的壓縮與保護,提升代碼效率與安全性。
㈡ 求助前端JS都是用什麼加密的
js的不可讀化處理分為三個方面:壓縮(compression)、混淆(obfuscation) 和加密(encryption)。
1. 壓縮
這一操作的目的,是讓最終代碼傳輸量 (不代表代碼量, 也不代表文件體積)盡可能小。壓縮js的工具,常見的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。
通常在代碼壓縮的過程中,只改變代碼的語法,代碼的語義和控制流不會有太大改變。
常見做法是把局部變數縮短化,把一些運算進行等價替換等。代碼壓縮對於代碼保護有一些幫助,但由於語義和控制流基本沒變,起不了太大作用。
在壓縮層面上,代碼不可讀只是一種附帶傷害,不是最終目的。
2. 混淆
這一操作的目的,是讓代碼盡可能地不可讀,主要用作代碼保護。
讓代碼不可讀,增加分析的難度,這是唯一目的。混淆過後文件體積變大一倍也沒關系,代碼量變多也沒關系,運算慢50% 也沒關系。
常見的做法有:分離常量、打亂控制流、增加無義代碼、檢查運行環境如果不對就罷工,等等。
在混淆層面上,代碼不可讀是最終目的。
值得一提的是,Google Closure Compiler 的 Advance Level Compression 會壓縮類和對象的成員,其壓縮結果很難分析,也可以認為是一種混淆,但兼容性不太好。
3. 加密
有加密就有解密,意味著加密操作可逆,密文可以明文化。
在Web界,可以稱之為加密的東西包括:HTTPS傳輸、JavaScript實現對稱加密或者不對稱加密等等。