使用ASP加密算法加密你的數據
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
[p] 簡介 [br] 首先簡單介紹一下有關加密的背景。由于美國禁止幾種密碼算法的對外出口的加密位數(例如ssl的40位加密限制),本文將介紹一種asp可以使用的簡單字符加密算法,而不是那些受限制的加密算法。其實,這里介紹的加密算法對于一般的運用來說已經足夠解密人麻煩一陣子的了。它的加密基礎是最簡單的vernum密碼方法,它的基本原理是,需要有一個需要加密的明文和一個隨機生成的解密鑰匙文件。然后使用這兩個文件組合起來生成密文。[br] (明文) 組合 (密鑰) = 加密后的密文[br] 所以本文介紹的是生成密鑰的代碼。我們假設我們生成的密鑰為512位長的密鑰,它已經足夠來加密一個文本字符了。代碼如下:[br] keygen.asp文件[br] <% [br] '****************************** [br] ' keygen.asp [br] '****************************** [br] const g_keylocation = "c:\key.txt" [br] const g_keylen = 512 [br] on error resume next [br] call writekeytofile(keygen(g_keylen),g_keylocation) [br] if err <> 0 then [br] response.write "error generating key." & "
" [br] response.write err.number & " [br] " [br] response.write err.description & " [br] " [br] else [br] response.write "key successfully generated." [br] end if [br] sub writekeytofile(mykeystring,strfilename) [br] dim keyfile, fso [br] set fso = server.createobject("scripting.filesystemobject") [br] set keyfile = fso.createtextfile(strfilename, true) [br] keyfile.writeline(mykeystring) [br] keyfile.close [br] end sub [br] function keygen(ikeylength) [br] dim k, icount, strmykey [br] lowerbound = 35 [br] upperbound = 96 [br] randomize ' initialize random-number generator. [br] for i = 1 to ikeylength [br] s = 255 [br] k = int(((upperbound - lowerbound) + 1) * rnd + lowerbound) [br] strmykey = strmykey & chr(k) & "" [br] next [br] keygen = strmykey [br] end function [br] %>[br]在iis下運行上面的keygen.asp頁面。你只需要如此做一次,他將把密鑰寫入文件 c:\key.txt中 (如果你愿意的話,你也可以把這個文件放到另外一個更加安全的地方)。然后你可以打開這個key.txt文件,它將包含512個ascii碼在35到96之間的字符。并且由于是隨機生成的,所以每個人的私人密鑰文件key.txt將是不一樣的,下面是一個例子密鑰文件: [br] iy/;$>=3)?^-+7m32#q]voii.q=ofmc`:p7_b; original string: " & g_cryptthis & " " [br] response.write " key value: " & g_key & " " [br] response.write " encrypted cyphertext: " & encrypt(g_cryptthis) & " " [br] response.write " decrypted cyphertext: " & decrypt(encrypt(g_cryptthis)) & " " [br] function encrypt(strcryptthis) [br] dim strchar, ikeychar, istringchar, i [br] for i = 1 to len(strcryptthis) [br] ikeychar = asc(mid(g_key,i,1)) [br] istringchar = asc(mid(strcryptthis,i,1)) [br] ' *** uncomment below to encrypt with addition, [br] ' icryptchar = istringchar + ikeychar [br] icryptchar = ikeychar xor istringchar [br] strencrypted = strencrypted & chr(icryptchar) [br] next [br] encrypt = strencrypted [br] end function [br] function decrypt(strencrypted) [br] dim strchar, ikeychar, istringchar, i [br] for i = 1 to len(strencrypted) [br] ikeychar = (asc(mid(g_key,i,1))) [br] istringchar = asc(mid(strencrypted,i,1)) [br] ' *** uncomment below to decrypt with subtraction [br] ' idecryptchar = istringchar - ikeychar [br] idecryptchar = ikeychar xor istringchar [br] strdecrypted = strdecrypted & chr(idecryptchar) [br] next [br] decrypt = strdecrypted [br] end function [br] function readkeyfromfile(strfilename) [br] dim keyfile, fso, f [br] set fso = server.createobject("scripting.filesystemobject") [br] set f = fso.getfile(strfilename) [br] set ts = f.openastextstream(1, -2) [br] do while not ts.atendofstream [br] keyfile = keyfile & ts.readline [br] loop [br] readkeyfromfile = keyfile [br] end function [br] %> [br] 在crypt.asp中我們首先從密鑰文件中得到密鑰值,然后從這段密鑰中截取和我們需要加密的明文同樣長度的密鑰。然后使用一個簡單的異或操作將明文和密鑰進行運算,那么得到的結果就是加密后的密文了。過程很簡單的。 [br] 由于是使用了異或操作,所以解密將非常簡單,只要使用同樣的密鑰對密文再次進行異或操作就能夠解密了。[br] 在上面介紹的基礎上,你可以少加改動,就可以使用同樣的方法加密一個文件。[br] 唯一需要注意的是,對于一個二進制文件,你需要做一些完整性檢查以保證轉換回來的字符不要越界。[br] 現在你需要做的就是把密鑰保存在服務器上的一個安全的地方(不能夠被外部訪問)[br] 附注: [br] vernam密碼是由gilbert vernam (他是at&t的工程師)在1918年發明的。 [/p]
|
關鍵字查詢
相關文章
正在查詢... |