加密的XML
發(fā)表時(shí)間:2024-02-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]加密的XML 在加密的XML (EXML) 例子中,我只了一個(gè)簡單的contacts.xml 文件。在這個(gè)例子中大多數(shù)的關(guān)聯(lián) 文件都很簡單,在下表中做一個(gè)簡要介紹。我將集中介紹2個(gè)ASP函數(shù),他們用來訪問EXML 函數(shù)。 它們是OpenEXML()和 SaveEXML(), 存儲(chǔ)在lib_ex...
加密的XML
在加密的XML (EXML) 例子中,我只了一個(gè)簡單的contacts.xml 文件。在這個(gè)例子中大多數(shù)的關(guān)聯(lián) 文件都很簡單,在下表中做一個(gè)簡要介紹。我將集中介紹2個(gè)ASP函數(shù),他們用來訪問EXML 函數(shù)。 它們是OpenEXML()和 SaveEXML(), 存儲(chǔ)在lib_exml.asp 包含文件中(如果是在產(chǎn)品商業(yè)環(huán)境中使用的話,應(yīng)該被放在一個(gè)COM組件中)。
文件名 描述
Addcontact.asp 這個(gè)文件用來向 EXML文件中增加新的聯(lián)系。
Contacts.xml 這個(gè)文檔用來存儲(chǔ)聯(lián)系數(shù)據(jù),作為一個(gè)加密的文件存儲(chǔ)在硬盤驅(qū)動(dòng)器上。
Contacts.xsl 這個(gè)stylesheet被listcontacts.asp用來顯示contacts.xml的內(nèi)容。
Default.asp 是一個(gè)簡單的HTML文件,有到addcontact.asp和listcontacts.asp的鏈接。
Lib_exml.asp 一個(gè)ASP包含文件,包含用來存取加密XML文檔的兩個(gè)函數(shù),被addcontact.asp 和listcontacts.asp所包含。
Listcontacts.asp 一個(gè)簡單的 ASP頁面,用來顯示contacts.xml的內(nèi)容。
Addcontact.asp和listcontact.asp中都包括相當(dāng)數(shù)量的與XML相關(guān)的代碼,用來存取和讀contacts.xml文檔。
Lib_exml.asp包含這個(gè)應(yīng)用程序使用的兩個(gè)關(guān)鍵函數(shù),它們是OpenEXML()和 SaveEXML()。這里列出它們的詳細(xì)內(nèi)容。
OpenEXML()
首先聲明函數(shù),用dim聲明變量,并例示我們需要的對象:
'Returns strResult as String, "" if successful
'Returns xmldom object in xmldom parameter
'Takes filepath as a relative path to the encrypted XML file
'Takes password as the password to use to decrypt the EXML file
Function OpenEXML(xmldom, filepath, password)
Dim CM
Dim Context
Dim key
Dim objXML
Dim objFSO
Dim clearfile
Dim strResult
'Instantiate Objects
Set CM = Server.CreateObject("Persits.CryptoManager")
Set Context = CM.OpenContext("mycontainer", True)
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
然后,我們將提供的文件名解密到一個(gè)臨時(shí)文件中,這個(gè)文件在最后將要?jiǎng)h除。注意由于系統(tǒng)上有這個(gè)明碼文件,即使很簡短,我們的系統(tǒng)安全也有了一個(gè)漏洞。在樣本應(yīng)用程序中的這些函數(shù)的目的是概念上的一個(gè)安全保證,但并不是一個(gè)完全的安全文件管理應(yīng)用程序。
strResult = ""
clearfile = Server.MapPath(filepath & ".clear")
'Get cryptographic key
Set key = Context.GenerateKeyFromPassword(password, calgSHA, calgRC4, 40)
key.DecryptFile Server.MapPath(filepath), clearfile
現(xiàn)在我們正在使用40位的密碼系統(tǒng),如果你的機(jī)器上安裝了適當(dāng)?shù)腁PI,那么你可以使用更強(qiáng)大的密碼系統(tǒng)。簡單地說,如果你有IE的128位安全升級,你就可以通過AspEncrypt使用128位的密碼 系統(tǒng)。
存儲(chǔ)了加密文件后,我們用標(biāo)準(zhǔn)XMLDOM 代碼打開它,處理差錯(cuò)然后刪除解密的文件:
'Processor should validate this document
objXML.validateOnParse=True
objXML.async = false
'Load the decrypted file into an XML Document
objXML.load clearfile
If Err.Number <> 0 Then
strResult = strResult & "Error loading " & clearfile _
& " into XML object.<BR>"
strResult = strResult & Err.Number & ": " & Err.Description & "<BR>"
Exit Function
End If
'Delete the decrypted file
objFSO.DeleteFile clearfile, True
If Err.Number <> 0 Then
strResult = strResult & "Cannot delete file '" & clearfile _
& "'" & "<BR>"
strResult = strResult & Err.Number & ": " & Err.Description & "<BR>"
Exit Function
End If
最后,我們清除對象,結(jié)束函數(shù)。XML文檔在xmldom 參數(shù)中被返回調(diào)用它的程序。如果有錯(cuò)誤,就作為函數(shù)的返回字符串報(bào)告,如果操作成功的話這個(gè)字符串是個(gè)空字符串。
'Clean up objects
Set CM = Nothing
Set Context = Nothing
Set Key = Nothing
Set objFSO = Nothing
If Err <> 0 Then
strResult = strResult & Err.Number & ": " & Err.Description & "<BR>"
End If
Set xmldom = objXML
OpenEXML = strResult
End Function