您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200507
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

加密的XML

fleg

 

加密的XML

   在加密的XML (EXML) 例子中,我只了一个简单的contacts.xml 文件。在这个例子中大多数的关联 文件都很简单,在下表中做一个简要介绍。我将集中介绍2个ASP函数,他们用来访问EXML 函数。 它们是OpenEXML()和 SaveEXML(), 存储在lib_exml.asp 包含文件中(如果是在产品商业环境中使用的话,应该被放在一个COM组件中)。

文件名 描述
Addcontact.asp 这个文件用来向 EXML文件中增加新的联系。
Contacts.xml 这个文档用来存储联系数据,作为一个加密的文件存储在硬盘驱动器上。
Contacts.xsl 这个stylesheet被listcontacts.asp用来显示contacts.xml的内容。
Default.asp 是一个简单的HTML文件,有到addcontact.asp和listcontacts.asp的链接。
Lib_exml.asp 一个ASP包含文件,包含用来存取加密XML文档的两个函数,被addcontact.asp 和listcontacts.asp所包含。
Listcontacts.asp 一个简单的 ASP页面,用来显示contacts.xml的内容。

   Addcontact.asp和listcontact.asp中都包括相当数量的与XML相关的代码,用来存取和读contacts.xml文档。

   Lib_exml.asp包含这个应用程序使用的两个关键函数,它们是OpenEXML()和 SaveEXML()。这里列出它们的详细内容。

   OpenEXML()

   首先声明函数,用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")

   然后,我们将提供的文件名解密到一个临时文件中,这个文件在最后将要删除。注意由于系统上有这个明码文件,即使很简短,我们的系统安全也有了一个漏洞。在样本应用程序中的这些函数的目的是概念上的一个安全保证,但并不是一个完全的安全文件管理应用程序。

  strResult = ""
   clearfile = Server.MapPath(filepath & ".clear")

   ´Get cryptographic key
   Set key = Context.GenerateKeyFromPassword(password, calgSHA, calgRC4, 40) 
   key.DecryptFile Server.MapPath(filepath), clearfile

   现在我们正在使用40位的密码系统,如果你的机器上安装了适当的API,那么你可以使用更强大的密码系统。简单地说,如果你有IE的128位安全升级,你就可以通过AspEncrypt使用128位的密码 系统。

   存储了加密文件后,我们用标准XMLDOM 代码打开它,处理差错然后删除解密的文件:

  ´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

   最后,我们清除对象,结束函数。XML文档在xmldom 参数中被返回调用它的程序。如果有错误,就作为函数的返回字符串报告,如果操作成功的话这个字符串是个空字符串。

  ´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