用VB實現數據的加解密算法

發表于:2007-07-14來源:作者:點擊數: 標簽:
隨著計算機應用的普及,信息的 安全 性越來越受到人們的重視,對數據加解密算法的研究也在不斷地深入,但一般的加解密算法如DES和RSA等過于復雜,且運算速度慢,特別是它的移位操作,對于 VB 這樣的高級語言實現起來也比較困難。而一般的 MI S(Management I
  隨著計算機應用的普及,信息的安全性越來越受到人們的重視,對數據加解密算法的研究也在不斷地深入,但一般的加解密算法如DES和RSA等過于復雜,且運算速度慢,特別是它的移位操作,對于VB這樣的高級語言實現起來也比較困難。而一般的MIS(Management Information System)系統多用高級語言開發,對數據的加密要求不高,因此,研究簡易數據加解密算法還是有相當的現實意義。  

簡易加解密算法要求:  
  1、 算法不宜過于復雜,且具有一定的保密性  
  2、 對于高級語言很容易能實現  
  3、 速度快,可以在任何時候、任何地方使用。  
  4、 加密后的數據能正確地得到解密  

  鑒于以上特點,從加密的主要方法看,換位法過于簡單,特別是對于數據量少的情況很容易由密文猜出明文,替換法則不失為一種行之有效的簡易算法。  

  首先,Windows下的字符集采用Unicode字符集,它容量大,可置換的范圍廣;其次,在Unicode字符集中,所有字符的內碼都占兩個字節,不再象DOS下西文字符占一個字節,中文字符占兩個字節,這樣無論西文還是中文都可以互換。因此,將某個字符的高字節和低字節分別加以運算,生成另外一個0-255之間的數,然后再將它們合成為另一個字符,從而置換數據達到數據加密的作用,解密時則相反。  

  從各種位運算的特點看,異或運算最適合用于簡易加解密運算,因為當一個數A和另一個數B進行異或運算會生成另一個數C,如果再將C和B進行異或運算則C又會還原為A。如:128和253進行異或運算的結果是125,125和253再進行異或運算則結果又是128。其中,128就是要加密的數據,253則是密鑰。利用這個特性可以將加密和解密用一個函數實現。用同一密鑰進行奇數次運算時,是對數據進行加密運算,當進行偶數次運算時,是對數據進行解密運算。如果對Unicode字符進行這種運算,需要兩個密鑰,其取值范圍為0-255,其中一個用于對高字節加密,一個用于對低字節進行加密,這樣對同一字符的加密就有255×255=65025種可能。
如果更換密鑰后對密文再進行加密,則會有無窮的可能性。如:密鑰K1=68,K2=134,則字符A的低字節為65,它和K1異或后為5,A的高字節為0,它和K2異或后還是134,兩者合成的字符為"蘅"。再如:"密"的低字節為198,和K1異或后為130,它的高字節為91,和K2異或后為221,兩者合成則為一個不可見的字符。  
  這種加解密數據的方法對任何字符都是有效的,不象有些簡易加密算法,只對西文字符有效,對中文加密后再解密無法還原為原來的字符。根據以上原理可以寫出以下VB函數,用于對數據進行加密和解密運算:  

Private Function Encrypt(ByVal strSource As String, ByVal Key1 As Byte, _  
ByVal Key2 As Integer) As String  
Dim bLowData As Byte  
Dim bHigData As Byte  
Dim i As Integer  
Dim strEncrypt As String  
Dim strChar As String  
For i = 1 To Len(strSource)  

 ‘從待加(解)密字符串中取出一個字符  

 strChar = Mid(strSource, i, 1)  

 ‘取字符的低字節和Key1進行異或運算  

 bLowData = AscB(MidB(strChar, 1, 1)) Xor Key1  

 ‘取字符的高字節和K2進行異或運算  

 bHigData = AscB(MidB(strChar, 2, 1)) Xor Key2  

 ‘將運算后的數據合成新的字符  

 strEncrypt = strEncrypt & ChrB(bLowData) & ChrB(bHigData)  

Next  
Encrypt = strEncrypt  
End Function  

  如果strSource="這是一個被加密的字符串&=188,Key2=24,則加密后的串為:"靨?嚼?逗??游??嚎",重新將結果再次進行加密運算則還原為原來的字符串。其中"?"處為不可見字符。  

  以上程序只是從原理上分析后給出的實例,在實際運用當中應從字符密鑰中分別求出Key1和Key2,然后將加密后的數據再更換Key1和Key2反復進行多次加密運算,并結合換位法實現更大難度的加解密算法。只是需要注意的是,加密和解密應分別寫出對應的函數,解密的順序和加密的順序正好是相反的。  

  以上程序在中文VB6中以不同語言的字符進行過多次測驗并通過。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97