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語句正常寫入文件(得到的只是空格),有興趣者不妨一試。->