使用ASP加密算法加密你的數(shù)據(jù)(二)

在第一部分,討論了如何生成密鑰,下面將介紹如何使用這個(gè)密鑰來(lái)加密和解密一個(gè)字符串。

下面的代碼就是能夠同時(shí)實(shí)現(xiàn)這個(gè)功能的函數(shù)

Crypt.asp文件

<%

Dim g_Key

 

Const g_CryptThis = "Now is the time for all good men to come to the aid of their country."

Const g_KeyLocation = "c:\key.txt"

 

g_Key = mid(ReadKeyFromFile(g_KeyLocation),1,Len(g_CryptThis))

 

Response.Write "<p>ORIGINAL STRING: " & g_CryptThis & "<p>"

Response.Write "<p>KEY VALUE: " & g_Key & "<p>"

Response.Write "<p>ENCRYPTED CYPHERTEXT: " & EnCrypt(g_CryptThis) & "<p>"

Response.Write "<p>DECRYPTED CYPHERTEXT: " & DeCrypt(EnCrypt(g_CryptThis)) & "<p>"

 

Function EnCrypt(strCryptThis)

Dim strChar, iKeyChar, iStringChar, i

for i = 1 to Len(strCryptThis)

iKeyChar = Asc(mid(g_Key,i,1))

iStringChar = Asc(mid(strCryptThis,i,1))

' *** uncomment below to encrypt with addition,

' iCryptChar = iStringChar + iKeyChar

iCryptChar = iKeyChar Xor iStringChar

strEncrypted = strEncrypted & Chr(iCryptChar)

next

EnCrypt = strEncrypted

End Function

 

Function DeCrypt(strEncrypted)

Dim strChar, iKeyChar, iStringChar, i

for i = 1 to Len(strEncrypted)

iKeyChar = (Asc(mid(g_Key,i,1)))

iStringChar = Asc(mid(strEncrypted,i,1))

' *** uncomment below to decrypt with subtraction

' iDeCryptChar = iStringChar - iKeyChar

iDeCryptChar = iKeyChar Xor iStringChar

strDecrypted = strDecrypted & Chr(iDeCryptChar)

next

DeCrypt = strDecrypted

End Function

 

Function ReadKeyFromFile(strFileName)

Dim keyFile, fso, f

set fso = Server.CreateObject("Scripting.FileSystemObject")

set f = fso.GetFile(strFileName)

set ts = f.OpenAsTextStream(1, -2)

 

Do While not ts.AtEndOfStream

keyFile = keyFile & ts.ReadLine

Loop

 

ReadKeyFromFile = keyFile

End Function

 

%>

在Crypt.asp中我們首先從密鑰文件中得到密鑰值,然后從這段密鑰中截取和我們需要加密的明文同樣長(zhǎng)度的密鑰。然后使用一個(gè)簡(jiǎn)單的異或操作將明文和密鑰進(jìn)行運(yùn)算,那么得到的結(jié)果就是加密后的密文了。過(guò)程很簡(jiǎn)單的。

由于是使用了異或操作,所以解密將非常簡(jiǎn)單,只要使用同樣的密鑰對(duì)密文再次進(jìn)行異或操作就能夠解密了。

在上面介紹的基礎(chǔ)上,你可以少加改動(dòng),就可以使用同樣的方法加密一個(gè)文件。

唯一需要注意的是,對(duì)于一個(gè)二進(jìn)制文件,你需要做一些完整性檢查以保證轉(zhuǎn)換回來(lái)的字符不要越界。

現(xiàn)在你需要做的就是把密鑰保存在服務(wù)器上的一個(gè)安全的地方(不能夠被外部訪問(wèn))

附注:

Vernam密碼是由Gilbert Vernam (他是AT&T的工程師)在1918年發(fā)明的。這是一種使用異或方法進(jìn)行加密解密的方法。