用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