以前收集的一些資料---使用ASP加密算法加密你的數據(二) Julain Sitkewich 在第一部分,討論了如何生成密鑰,下面將介紹如何使用這個密鑰來加密和解密一個 字符串。 下面的代碼就是能夠同時實現這個功能的函數 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中我們首先從密鑰文件中得到密鑰值,然后從這段密鑰中 截取和我們需要加密的明文同樣長度的密鑰。然后使用一個簡單的異或操作 將明文和密鑰進行運算,那么得到的結果就是加密后的密文了。過程很簡單的。 由于是使用了異或操作,所以解密將非常簡單,只要使用同樣的密鑰對密文 再次進行異或操作就能夠解密了。 在上面介紹的基礎上,你可以少加改動,就可以使用同樣的方法加密一個文件。 唯一需要注意的是,對于一個二進制文件,你需要做一些完整性檢查以保證轉換回來 的字符不要越界。 現在你需要做的就是把密鑰保存在服務器上的一個安全的地方(不能夠被外部訪問) 附注: Vernam密碼是由Gilbert Vernam (他是AT&T的工程師)在1918年發明的。 這是一種使用異或方法進行加密解密的方法。
|