ASP代碼加密函數
07-19
function UnEncode(temp) but=1 for i =1 to len(temp) if mid(temp,i,1)<>"湯" then pk=asc(mid(temp,i,1))-but if pk>126 then pk=pk-95 elseif pk<32 then pk=pk+95 end if a=a&chr(pk) else a=a&vbcrlf end if next UnEncode=a end function function Encode(temp) but=1 cc=replace(temp,vbcrlf,"湯") for i= 1 to len(cc) if mid(cc,i,1)<>"湯" then pk=asc(mid(cc,i,1))+but if pk>126 then pk=pk-95 elseif pk<32 then pk=pk+95 end if a=a&chr(pk) else a=a&"湯" end if next 』a=replace(a,"""","""""") Encode=a end function***************************************************************************ASP代碼加密解密三大方法【轉帖】2010-06-21 14:24ASP代碼加密解密三大方法asp技法2010-04-09 13:46:38閱讀151目前對ASP程序的加密方法首要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法…如今,用ASP技能構建的網站隨處可見。由於ASP腳本是在伺服器上詮釋執行的(無法編譯),因此你辛苦開發出來的ASP代碼,很容易被人拷去任意修改,如何保護ASP源代碼呢?這是每1個ASP站長城市遇到的困難的問題,網上求解這類問題的帖子很是多,下面我們就來談談ASP程序的加密方法。一、如何加密ASP程序?目前對ASP程序的加密方法首要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法。1、施用微軟的MS Script Encode進行加密微軟提供了腳本編碼器MS Script Encode,可以對ASP程序進行加密。這是1個簡單的命令行工具,其執行文件是SRCENC.EXE,需要在DOS下運行。它只加密頁面中嵌入的腳本代碼,把網頁中之間的ASP代碼轉換成不可讀的亂碼,其他部分則保持原樣不變。加密後的程序,必需施用Internet Explorer 5.0以上版本才能沒事了瀏覽。用SRCENC加密之後,文件中被加密過的部分將變成只讀類型,假如你修改了加密部分(哪怕只改動1個字),就會引起全般文件不能施用。對VBScript,加密後在源文件的第一行會預示:SCRIPT LANGUAGE="VBScript.Encode";而JScript(或JavaScript)則會預示:SCRIPT LANGUAGE="JScript.Encode"(1)加密方法裸機"開始"/程序/附件/命令提醒符,在MS-DOS命令行中輸入以下命令,即可對某個asp文件加密:SRCENC[switches]要加密asp文件名加密後的文件名其中[switches]項目可以選以下五個參數[switches]含義舉例/s可選。命令中帶了該參數,加密過程當中熒幕上就不會有輸出。screnc/s lacl.sct ulacl.sct對時下目次中的腳本小程序lacl.sct加密,加密過程當中熒幕不預示任何信息/f可選。指定輸出文件是不是覆蓋同名輸入文件。忽略,將不執行覆蓋。screnc/f lacl.asp對文件lacl.asp加密,並用編碼後的同名文件覆蓋原文件/xl可選。是不是在.asp文件的頂部添加@Language指令。忽略,將添加。/l defLanguage可選。指定Script Encoder加密中選擇的預設腳本語言。文件中不包羅這種腳本語言特性的腳本將被Script Encoder忽略。對HTML文件,JScript為內置預設腳本語言;對ASP文件,VBScript為預設腳本語言;對擴展名為.vbs或.js的文件,Script Encoder也有自適應能力。screnc/l vbscript lacl.htm ulacl.htm對文件lacl.htm加密,並天生輸出文件ulacl.htm,確保沒有指定語言屬性的腳本塊施用VBScript/e defExtension可選。指定待加密文件的文件擴展名。預設狀況下,Script Encoder能識別asa,asp,cdx,htm,html,js,sct以及vbs文件。screnc/e asp 11*.*f:labxw-jm對11目次中的所有.ASP文件進行加密,並把編碼後的輸出文件放在f:labxw-jm目次中(2)操作舉例例如要加密時下目次中的lacl.asp文件,天生加密文件ulacl.asp,則在DOS下輸入命令:screnc lacl.asp ulacl.asp對時下目次中的所有.ASP文件進行加密,並把編碼後的輸出文件放在f:labxw中,則施用命令:screnc*.asp f:labxw 2、施用組件加密asp以上被screnc加密過的程序,是可以解密的(解密方法下文有介紹),要是你想徹底保護本身的asp代碼,可以經由過程開發activex dll組件的方法進行保護。Dll文件是被編譯過的機器代碼,要是沒有源項目文件,是不有可能被反編譯的,以是組件加密這種方法最安全,也不有可能被破解。下面我們來舉例說明操作過程,例如你要保護以下asp代碼:以下是援用片段:set rs=server.createobject("adodb.recordset")sql="select*from gq where xs=1 order by date asc"rs.open sql,conn,1,1 if rs.eof and rs.bof then response.write"A HREF=new0.asp?lbid=gqx%=gqx%/A"else Response.Write""end if set rs=not你好ng conn.close set conn=not你好ng可以把它們改寫成VB組件,然後在ASP文件中挪用組件即可。操作步調如下:(1)新建1個vb6的activex dll項目在屬性窗口中,命名你的庫模塊以及項目文件(例如項目名lacl,模塊名disp),以後在asp文件中,挪用的對象名將為lacl_disp選擇vb6中的項目菜單中的references,選中microsoft activex data objects 2.0 library(2)編寫VB組件接下來把欲保護的asp代碼改寫成VB組件,代碼如下:以下是援用片段:public function html_combo(disp_table as string)as string dim outstring as string dim conn as adodb.connection dim rst as adodb.recordset dim sqlstring as string set conn=createobject("adodb.connection")set rst=createobject("adodb.recordset")sqlstring="select*from"&disp_table&"where xs=1 order by date asc"』以上是在VB中打開資料庫操作,資料庫中的表名、欄位名,你可以根據本身的需要修改conn.open"dsn=sumnet"rst.open sqlstring,conn,3,3 if rst.eof and rst.bof then outstring="還沒有這類單位信息"else rst.movefirst outstring="A HREF=new0.asp?lbid="&request("lbid")&"/A"end if html_combo=outstring rst.close conn.close end function寫好以上VB代碼後,保存項目並開始編譯。(3)天生安裝文件打開visual studio 6中附帶的package deployment wizard程序,選擇適才成立的activex項目文件lacl;選擇package,選擇要打包的腳本或施用默許腳本,選擇標準安裝,為天生的安裝文件選擇1個存放目次,選擇single cab.其他均默許;然後裸機下一步,安裝文件就不用人力天生了!⑷在IIS伺服器上安裝組件在IIS伺服器上運行這個安裝文件,把組件安裝到伺服器上。⑸在網頁中挪用組件以後在ASP文件中,經由過程挪用該組件完成原來的功效。在網頁中挪用你製作的組件,方法如下:以下是援用片段:%@language="vbscript"%%set diaoyong=server.createobject("lacl_disp.disp")%html body%=diaoyong.html_combo("gq")%br/body/html你看,現在Asp文件中的內部實質意義只是組件的挪用(與以前完全不同),別人即使得到該文件,也無法編輯修改源代碼,因為代碼都被封裝在VB組件中了,對組件中的代碼,外人是無法看到、也不能反編譯的!三、本身編寫加密程序組件加密方法雖然不可破解,但是要求你熟悉VB編程,需要把ASP代碼改寫成VB組件,工作量很大,以是建議大家本身編程來保護asp代碼,其基本思路是:寫1個加密函數base64Encode以及解密函數base64Decode,先用加密函數處理要保護的asp代碼,得到對應的密文hu;然後再用execute(base64Decode(hu))替換欲保護的asp代碼。例如我們要保護上邊那段asp代碼,可以如許操作:(1)用WORD處理要保護的ASP代碼將要保護的ASP代碼拷到WORD中;在WORD中,把代碼里的段沒有中標記(回車換行)全部替換成"水"這個漢字,方法是:點這兒"編輯"/替換,游標移到"查尋內部實質意義"欄,點"高級"/特殊字元,選擇"段沒有中標記";游標移到"替換為"欄,輸入"水",最後點"全部替換"。同法,把代碼中的單引號也全部替換成"加"這個漢字。(2)編寫、運行加密程序在FrontPage中編寫加密程序,該程序中有初始化函數initCodecs、加密函數base64Encode(代碼如下),把WORD處理後的代碼,copy粘貼在inp=""這句中,最後以test1.asp名存檔;在IE中輸入本地運行該文件;熒幕上會預示一大段亂碼(例如c2V0IHJzPXNlcnZlci5jcmVhd.),這就是《要保護的asp代碼》對應的密文!以下是援用片段:OPTION EXPLICIT const BASE_64_MAP_INIT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg你好jklmnopqrstuvwxyz 123456 123456 +/"dim newline dim Base64EncMap(63)dim Base64DecMap(127)dim inp,hu,encode call initCodecs』初始化inp="WORD處理後的asp代碼"』將要保護的asp代碼用WORD處理,然後填在此處hu=base64Encode(inp)』挪用函數base64Encode進行加密,得到密文hu Response.Write(hu)』預示密文PUBLIC SUB initCodecs()』初始化函數initCodecs newline="P"&chr(13)&chr(10)dim max,idx max=len(BASE_64_MAP_INIT)for idx=0 to max-1 Base64EncMap(idx)=mid(BASE_64_MAP_INIT,idx+1,1)next for idx=0 to max-1 Base64DecMap(ASC(Base64EncMap(idx)))=idx next END SUB PUBLIC FUNCTION base64Encode(plain)』加密函數base64Encode if len(plain)=0 then base64Encode=""exit function end if dim ret,ndx,by3,first,second,t你好rd by3=(len(plain)3)*3 ndx=1 do w你好le ndx=by3 first=asc(mid(plain,ndx+0,1))second=asc(mid(plain,ndx+1,1))t你好rd=asc(mid(plain,ndx+2,1))ret=ret&Base64EncMap((first4)AND 63)ret=ret&Base64EncMap(((first*16)AND 48)+((second16)AND 15))ret=ret&Base64EncMap(((second*4)AND 60)+((t你好rd64)AND 3))ret=ret&Base64EncMap(t你好rd AND 63)ndx=ndx+3 loop if by3 len(plain)then first=asc(mid(plain,ndx+0,1))ret=ret&Base64EncMap((first4)AND 63)if(len(plain)MOD 3)=2 then second=asc(mid(plain,ndx+1,1))ret=ret&Base64EncMap(((first*16)AND 48)+((second16)AND 15))ret=ret&Base64EncMap(((second*4)AND 60))else ret=ret&Base64EncMap((first*16)AND 48)ret=ret』&"="end if ret=ret』&"="end if base64Encode=ret END FUNCTION(3)重新改寫要保護的asp文件改寫原來的asp文件,在文件中增加UnEncode以及base64Decode函數,全部代碼如下:以下是援用片段:Dim Hu,Hu2『複印"欲保護asp代碼"的密文將之存放到Hu變數中Hu="c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mI GFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4"Hu2=base64Decode(hu)』還原要保護的ASP代碼execute(UnEncode(Hu2))』還原單引號、回車換行,並執行原代碼『解密函數base64Decode FUNCTION base64Decode(scrambled)if len(scrambled)=0 then base64Decode=""exit function end if dim realLen realLen=len(scrambled)do w你好le mid(scrambled,realLen,1)="="realLen=realLen-1 loop dim ret,ndx,by4,first,second,t你好rd,fourth ret=""by4=(realLen4)*4 ndx=1 do w你好le ndx=by4 first=Base64DecMap(asc(mid(scrambled,ndx+0,1)))second=Base64DecMap(asc(mid(scrambled,ndx+1,1)))t你好rd=Base64DecMap(asc(mid(scrambled,ndx+2,1)))fourth=Base64DecMap(asc(mid(scrambled,ndx+3,1)))ret=ret&chr(((first*4)AND 255)+((second16)AND 3))ret=ret&chr(((second*16)AND 255)+((t你好rd4)AND 15))ret=ret&chr(((t你好rd*64)AND 255)+(fourth AND 63))ndx=ndx+4 loop if ndx realLen then first=Base64DecMap(asc(mid(scrambled,ndx+0,1)))second=Base64DecMap(asc(mid(scrambled,ndx+1,1)))ret=ret&chr(((first*4)AND 255)+((second16)AND 3))if realLen MOD 4=3 then t你好rd=Base64DecMap(asc(mid(scrambled,ndx+2,1)))ret=ret&chr(((second*16)AND 255)+((t你好rd4)AND 15))end if end if base64Decode=ret END FUNCTION『還原單引號、回車換行函數UnEncode function UnEncode(cc)for i=1 to len(cc)if mid(cc,i,1)"水"then if mid(cc,i,1)="加"then temp=""""&temp else temp=Mid(cc,i,1)+temp end if else temp=newline&temp end if next UnEncode=temp end function將以上代碼以test2.asp名存檔。⑷用SRCENC加密test2.asp用SRCENC加密test2.asp,然後把它公布到伺服器上,如許別人即使得到該文件、破解了SRCENC加密,也無法看到原代碼,因為原代碼在test2.asp中是密文(Hu="c2V0IHJzPXNlcnZlc.),以是ASP代碼就被保護起來了!二、加密過的asp程序如何解密?如何對加密過的asp程序解密呢?首先我們要告訴大家,用組件法加密的asp程序是無法解密的,而screnc加密過的程序則可以解密,方法是:施用解密軟體(ZWDECODE.EXE)。ZWDECODE.EXE(下載地址可以對MS Script Encode加密的ASP文件進行解密,還原出源代碼。(1)解密方法裸機"開始"/程序/附件/命令提醒符,在MS-DOS命令行中輸入以下命令,即可恢復原代碼:ZWDECODE已經加密asp文件名其中已經加密asp文件名必需輸入,該文件名可帶目次路徑;也必需輸入,這是要天生的輸出文件名,也能夠引路徑信息。(2)舉例例如F:22lacl.asp曾被screnc加密處理過,現在要恢復其中的源代碼,你可以在MS-DOS中輸入以下命令:ZWDECODE F:22lacl.asp d:ulacl.asp執行完畢,在D盤上就會天生1個ulacl.asp文件,打開該文件,你就能看到源代碼了!______________________________________________________________________________________________加密函數base64Encode<%const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"dim newlinedim Base64EncMap(63)dim Base64DecMap(127)"初始化函數PUBLIC SUB initCodecs()" 初始化變數newline = "<P>" & chr(13) & chr(10)dim max, idxmax = len(BASE_64_MAP_INIT)for idx = 0 to max - 1Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)nextfor idx = 0 to max - 1Base64DecMap(ASC(Base64EncMap(idx))) = idxnextEND SUB"Base64加密函數PUBLIC FUNCTION base64Encode(plain)if len(plain) = 0 thenbase64Encode = ""exit functionend ifdim ret, ndx, by3, first, second, thirdby3 = (len(plain) 3) * 3ndx = 1do while ndx <= by3first = asc(mid(plain, ndx+0, 1))second = asc(mid(plain, ndx+1, 1))third = asc(mid(plain, ndx+2, 1))ret = ret & Base64EncMap( (first 4) AND 63 )ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third 64) AND 3 ) )ret = ret & Base64EncMap( third AND 63)ndx = ndx + 3loopif by3 < len(plain) thenfirst = asc(mid(plain, ndx+0, 1))ret = ret & Base64EncMap( (first 4) AND 63 )if (len(plain) MOD 3 ) = 2 thensecond = asc(mid(plain, ndx+1, 1))ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )ret = ret & Base64EncMap( ((second * 4) AND 60) )elseret = ret & Base64EncMap( (first * 16) AND 48)ret = ret "& "="end ifret = ret "& "="end ifbase64Encode = retEND FUNCTION"Base64解密函數PUBLIC FUNCTION base64Decode(scrambled)if len(scrambled) = 0 thenbase64Decode = ""exit functionend ifdim realLenrealLen = len(scrambled)do while mid(scrambled, realLen, 1) = "="realLen = realLen - 1loopdim ret, ndx, by4, first, second, third, fourthret = ""by4 = (realLen 4) * 4ndx = 1do while ndx <= by4first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))ret = ret & chr( ((first * 4) AND 255) + ((second 16) AND 3))ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15))ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))ndx = ndx + 4loopif ndx < realLen thenfirst = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))ret = ret & chr( ((first * 4) AND 255) + ((second 16) AND 3))if realLen MOD 4 = 3 thenthird = Base64DecMap(asc(mid(scrambled,ndx+2,1)))ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15))end ifend ifbase64Decode=retEND FUNCTIONcall initCodecsabc="1"cba="MQ""response.write(base64Decode(cba))response.write(base64Encode(abc))%>
推薦閱讀:
推薦閱讀:
※HTTPS 加密了什麼內容?
※用已知加密演算法AES加密文本123,得到密文xxx,問能否根據密文、加密演算法、原文本123直接推導出密鑰是什麼?
※如何從零基礎開始研究後量子加密,這門學科的關鍵點在哪裡?
※iPhone進入刷臉時代,我能用貓主子的臉給手機加密嗎?
※為什麼正版光碟無法完全複製?