巧用VB.NET RND()函數實現文件加密功能
在VB.NET中定義了很多種的函數,我們不能一一的都使用過,只有你用到過的函數你較為熟悉,這里就VB.NET RND()函數和大家簡單的分析一下。VB.NET RND()函數有一個重要的特征:當RND()的參數(我們稱這里可以稱它為種子)為負值時,同一種子(負值)產生同一個隨機數序列。同時Visual Basic還具有強大的二進制技術功能,這樣我們可以按以下思路實現文件內容加密:
- X=RND(-KEY) ’KEY為正數
- VAULE=INT(256*RND) ’產生一個隨機數(以此為密碼)
- Open FILENAME$ For Binary As #FILENUM’打開文件
- Get #FILENUM,I,A ’取文件內容
- B=A XOR VAULE ’得到加密文件
結合
- C=B XOR VAULE’得到解密文件(B為加密后文件內容)
注意:這里的A非整個文件內容,可以是極少部分、幾個字節甚至單個字節,若為單字節,則文件中的每個字節同不同的數異或,破譯難度可見有多么大。具體過程:
- Sub ENDECODE(FILENAME$,MA,FILE2$)'參數為:源文件,密碼,目標文件
- Dim FILENUM As Integer,X As Single,I As Single
- Dim CHARNUM As Integer,RANDOMINTEGER As Integer
- Dim SINGLECHAR As String *1,filen2 As Integer'取單字節
- If MA<0 Them
- MAMA=MA*(-1)
- End If
- X=Rnd(-MA)'參數為負
- FILENUM=FreeFile
- Open FILENAME$ For Binary As #FILENUM '二進制方式打開源文件
- filen2=FreeFile
- Open FILE2$ For Output As #filen2’以順序文件打開目標文件
- For i=1 To LOF(FILENUM)'LOF()文件字節長
- Get #FILENUM,i,SINGLECHAR'取單字節內容
- CHARNUM=Asc(SINGLECHAR)
- RANDOMINTEGER=Int(256*Rnd)'得到字母表
- CHARNUMCHARNUM=CHARNUM Xor RANDOMINTEGER'異或
- Print #filen2,Chr$(CHARNUM);’寫入目標文件
- Next I
- Close FILENUM
- Close filen2
- ok ’調用成功對話框
- End Sub
#T#上面利用VB.NET RND()函數調用過程可以對任何exe com、文本等文件進行加解密(奇數次加密,偶數次解密),重演性極好,保密性特優,若對上述過程進一步加工,如進行多重隨機等手段處理,那么將會更上一層樓,在此不累述。順便提一下,上面過程若對目標文件同樣以二進制文件打開、寫入,那么只能對純西文文本進行加解密,對于純中文文本則通過修改取雙字節、I的步長為2來實現,其它(中西文結合文本、exe com等文件)則將得不到預期結果,其原因可以能是ascll大于127的字符,不能正常顯示,不能用put語句正常寫入文件(得到的只是空格),有興趣者不妨一試。