VISUALBASIC的RND()函數有一個重要的特徵:當RND()的參數(我們稱這裡可以稱它為種子)為負值時,同一種子(負值)產生同一個隨機數字序列。同時VISUALBASIC也具有強大的二進位技術功能,讓我們可以依照下列思路實現檔案內容加密:
X=RND(-KEY)
'KEY為正數
VAULE=INT(256*RND)'產生一個隨機數(以此為密碼)
OpenFILENAME$ForBinaryAs#FILENUM'開啟文件
Get#FILENUM,I,A'取檔案內容
B=AXORVAULE'得到加密文件
結合
C=BXORVAULE'得到解密檔案(B為加密後檔案內容)
注意:這裡的A非整個文件內容,可以是極少部分、幾個字節甚至單個字節,若為單字節,則文件中的每個字節同不同的數異或,破譯難度可見有多麼大。具體過程:
SubENDECODE(FILENAME$,MA,FILE2$)'參數為:原始檔,密碼,目標檔
DimFILENUMAsInteger,XAsSingle,IAsSingle
DimCHARNUMAsInteger,RANDOMINTEGERAsInteger
DimSINGLECHARAsString*1,filen2AsInteger'取單字節
IfMA<0Them
MA=MA*(-1)
EndIf
X=Rnd(-MA)'參數為負
FILENUM=FreeFile
OpenFILENAME$ForBinaryAs#FILENUM'二進位方式開啟原始檔
filen2=FreeFile
OpenFILE2$ForOutputAs#filen2'以順序檔案開啟目標文件
ForI=1ToLOF(FILENUM)'LOF()檔案位元組長
Get#FILENUM,I,SINGLECHAR'取單字節內容
CHARNUM=Asc(SINGLECHAR)
RANDOMINTEGER=Int(256*Rnd)'得到字母表
CHARNUM=CHARNUMXorRANDOMINTEGER'異或
PRint#filen2,Chr$(CHARNUM);'寫入目標文件
NextI
CloseFILENUM
Closefilen2
ok'呼叫成功對話框
EndSub
呼叫格式:ENDECODE來源檔名,密碼,目標檔名
上面過程可以對任何EXE、COM、文字等檔案進行加解密(奇數次加密,偶數次解密),重演性極佳,保密性特優,若對上述過程進一步加工,如進行多重隨機等手段處理,那麼將會更上一層樓,在此不累述。
順便提一下,上面過程若對目標檔案同樣以二進位檔案開啟、寫入,那麼只能對純西文文字進行加解密,對於純中文文字則透過修改取雙位元組、I的步長為2來實現,其它(中西文結合文本、EXE、COM等文件)則將得不到預期結果,其原因可以能是ASCII大於127的字符,不能正常顯示,不能用put語句正常寫入文件(得到的只是空格),有興趣者不妨一試。
->