程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用RND()函數加密

用RND()函數加密

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved