js中escape的用法----前端頁面簡單加密

escape() 方法,它用於轉義不能用明文正確發送的任何字符。好比,電話號碼中的空格將被轉換成字符 %20,從而可以在 URL 中傳遞這些字符。javascript

http://localhost:8080/a?name="+escape("aa")+"&password="+escape("中華人民共和國");java

alert(s);安全

js對文字進行編碼涉及3個函數:escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent編輯器

一、   傳遞參數時須要使用encodeURIComponent,這樣組合的url纔不會被#等特殊字符截斷。                           函數

例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>工具

二、   進行url跳轉時能夠總體使用encodeURI測試

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");網站

三、   js使用數據時可使用escape編碼

 

例如:蒐藏中history紀錄。加密

四、   escape對0-255之外的unicode值進行編碼時輸出%u****格式,其它狀況下escape,encodeURI,encodeURIComponent編碼結果相同。
   最多使用的應爲encodeURIComponent,它是將中文、韓文等特殊字符轉換成utf-8格式的url編碼,因此若是給後臺傳遞參數須要使用 encodeURIComponent時須要後臺解碼對utf-8支持(form中的編碼方式和當前頁面編碼方式相同)

escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

    escape(str) 方法,它用於轉義不能用明文正確發送的任何字符。好比,電話號碼中的空格將被轉換成字符 %20,從而可以在 URL 中傳遞這些字符

若是須要發送安全信息或 XML,可能要考慮使用 send() 發送內容(本系列的後續文章中將討論安全數據和 XML 消息)。若是不須要經過 send() 傳遞數據,則只要傳遞 null 做爲該方法的參數便可。

js中的escape能夠加密數據 

 

 


  作網站最讓人煩惱的是本身辛辛苦苦寫出來的客戶端IE運行的JAVASCRIPT代碼經常被別人輕易的拷貝,實在讓本身的內心有點不是滋味,要知道本身寫點東西也挺累的.

但咱們也應該清楚地認識到由於JAVASCRIPT代碼是在IE中解釋執行,要想絕對的保密是不可能的,咱們要作的就是儘量的增大拷貝者複製的難 度,讓他知難而退(希望~!~),

以加密下面的JAVASCRIPT代碼爲例:
<SCRIPT LANGUAGE="JavaScript">
alert("《黑客防線》");
</SCRIPT>

  一:最簡單的加密解密

  你們對於JAVASCRIPT函數escape()和unescape()想必是比較瞭解啦(不少網頁加密在用它們),分別是編碼和解碼字符串,好比例子代碼用escape()函數加密後變爲以下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B


如何?還看的懂嗎?固然其中的ASCII字符"alert"並無被加密,若是願意咱們能夠寫點JAVASCRIPT代碼從新把它加密以下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B


呵呵!如何?此次是徹底都加密了!

當 然,這樣加密後的代碼是不能直接運行的,幸虧還有eval(codeString)可用,這個函數的做用就是檢查JavaScript代碼並執行,必選項 codeString 參數是包含有效 JavaScript 代碼的字符串值,加上上面的解碼unescape(),加密後的結果以下:
<SCRIPT LANGUAGE="JavaScript">
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
</SCRIPT>


是否是很簡單?不要高興,解密也就一樣的簡單,解密代碼都擺給別人啦(unescape())!呵呵

  二:轉義字符"\"的妙用

   你們可能對轉義字符"\"不太熟悉,但對於JavaScript提供了一些特殊字符如:\n (換行)、 \r (回車)、\' (單引號 )等應該是有所瞭解的吧?其實"\"後面還能夠跟八進制或十六進制的數字,如字符"a"則能夠表示爲:"\141"或"\x61"(注意是小寫字 符"x"),至於雙字節字符如漢字"黑"則僅能用十六進制表示爲"\u9ED1"(注意是小寫字符"u"),其中字符"u"表示是雙字節字符,根據這個原 理例子代碼則能夠表示爲:

八進制轉義字符串以下:
<SCRIPT LANGUAGE="JavaScript">
eval("\141\154\145\162\164\50\42\u9ED1\u5BA2\u9632\u7EBF\42\51\73")
</SCRIPT>

十六進制轉義字符串以下:
<SCRIPT LANGUAGE="JavaScript">
eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
</SCRIPT>


  此次沒有了解碼函數,由於JavaScript執行時會自行轉換,一樣解碼也是很簡單以下:
<SCRIPT LANGUAGE="JavaScript">
alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
</SCRIPT>

三:使用Microsoft出品的腳本編碼器Script Encoder來進行編碼

  工具的使用就很少介紹啦!我是直接使用JavaScript調用控件Scripting.Encoder完成的編碼!代碼以下:
<SCRIPT LANGUAGE="JavaScript">
var Senc=new ActiveXObject("Scripting.Encoder");
var code='<SCRIPT LANGUAGE="JavaScript">\r\nalert("《黑客防線》");\r\n<\/SCRIPT>';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
</SCRIPT>

編碼後的結果以下:
<SCRIPT LANGUAGE="JScript.Encode">#@~^FgAAAA==@#@&ls DD`J黑客防線r#p@#@&FgMAAA==^#~@</SCRIPT>

夠難看懂得吧?但相應的解密工具早已出來,並且連解密網頁都有!由於其解密網頁代碼過多,我就很少說拉!給你們介紹一下我首創的解密代碼,以下:
<SCRIPT LANGUAGE="JScript.Encode">
function decode(){
#@~^FgAAAA==@#@&ls DD`J黑客防線r#p@#@&FgMAAA==^#~@
}
alert(decode.toString());
</SCRIPT>

咋樣?夠簡單吧?它是原理是:編碼後的代碼運行前IE會先對其進行解碼,若是咱們先把加密的代碼放入一個自定義函數如上面的decode()中,而後對自定義函數decode調用toString()方法,獲得的將是解碼後的代碼!

若是你以爲這樣編碼獲得的代碼LANGUAGE屬性是JScript.Encode,很容易讓人識破,那麼還有一個幾乎鮮爲人知的window對象的方法execScript(),其原形爲:
window.execScript( sExpression, sLanguage )


參數:
sExpression:  必選項。字符串(String)。要被執行的代碼。
sLanguage :  必選項。字符串(String)。指定執行的代碼的語言。默認值爲 Microsoft JScript

使用時,前面的"window"能夠省略不寫!

利用它咱們能夠很好的運行編碼後的JavaScript代碼,以下:
<SCRIPT LANGUAGE="JavaScript">
execScript("#@~^FgAAAA==@#@&ls DD`J黑客防線r#p@#@&FgMAAA==^#~@","JScript.Encode")
</SCRIPT>


你能夠利用方法二對其中的""號內的字符串再進行編碼,使得"JScript.Encode"以及編碼特徵碼"#@~^"不出現,效果會更好!

  四:任意添加NUL空字符(十六進制00H)

   一次偶然的實驗,使我發如今HTML網頁中任意位置添加任意個數的"空字符",IE照樣會正常顯示其中的內容,並正常執行其中的JavaScript 代碼,而添加的"空字符"咱們在用通常的編輯器查看時,會顯示形如空格或黑塊,使得原碼很難看懂,如用記事本查看則"空字符"會變成"空格",利用這個原 理加密結果以下:(其中顯示的"空格"表明"空字符")
<S C RI P T L ANG U A G E =" J a v a S c r i p t ">

a l er t (" 黑 客 防 線") ;

< / SC R I P T>


如何?是否是顯得亂七八糟的?若是不知道方法的人很難想到要去掉裏面的"空字符"(00H)的!

  五:無用內容混亂以及換行空格TAB大法

   在JAVASCRIPT代碼中咱們能夠加入大量的無用字符串或數字,以及無用代碼和註釋內容等等,使真正的有用代碼埋沒在其中,並把有用的代碼中能加入 換行、空格、TAB的地方加入大量換行、空格、TAB,並能夠把正常的字符串用"\"來進行換行,這樣就會使得代碼難以看懂!如我加密後的形式以下:
<SCRIPT LANGUAGE="JavaScript">
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%&*()(&(^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑\
\
客\
防線"//ashjgfgf
/*
@#%$^&%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
</SCRIPT>

至少若是我看到這樣的代碼是不會有心思去分析它的,你哪?

  六:自寫解密函數法

  這個方法和1、二差很少,只不過是本身寫個函數對代碼進行解密,不少VBS病毒使用這種方法對自身進行加密,來防止特徵碼掃描!下面是我寫的一個簡單的加密解密函數,

加密代碼以下(詳細參照文件"加密.htm"):
<SCRIPT LANGUAGE="JavaScript">
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
alert(escape(c));
}
compile('alert("《黑客防線》");')
</SCRIPT>

運行獲得加密結果爲:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd

相應的加密後解密的代碼以下:
<SCRIPT LANGUAGE="JavaScript">
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
}
return c;
}
eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));
</SCRIPT>


  七:錯誤的利用  利用try{}catch(e){}結構對代碼進行測試解密,雖然這個想法很好(呵呵,誇誇本身),由於實用性不大,我僅給個例子<SCRIPT LANGUAGE="JavaScript">var a='alert("《黑客防線》");';var c="";for(var i=0;i<a.length;i++){c+=String.fromCharCode(a.charCodeAt(i)^61);}alert(c);//上面的是加密代碼,固然若是真正使用這個方法時,不會把加密寫上的//如今變量c就是加密後的代碼//下面的函數t()先假設初始密碼爲0,解密執行,//遇到錯誤則把密碼加1,而後接着解密執行,直到正確運行var d=c; //保存加密後的代碼var b=0; //假定初始密碼爲0t();function t(){try{eval(c);}catch(e){c="";for(var i=0;i<d.length;i++){c+=String.fromCharCode(d.charCodeAt(i)^b);}b+=1;t();//setTimeout("t()",0);}}</SCRIPT>

相關文章
相關標籤/搜索