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