|  | 
	
	
	|     
 
	
	AspEncrypt can be used in conjunction with AspUpload, our industry-standard file upload component,
	to implement a truly secure web-based file management system. The code samples
	in this section assume your system has the AspUpload component installed.
	A free trial copy of AspUpload can be downloaded from www.aspupload.com.
	
	 
	
	 
	
	Form based uploading (also known as browser-based uploading) is the process of
	sending files from a client machine to the web server with a browser via an HTML form.
	This HTML form must have a special attribute, ENCTYPE="multipart/form-data", and
	contain one or more items of the type <INPUT TYPE=FILE> through which files are selected for uploading.
	
	In an ASP environment, your web server must use a server component to capture files
	uploaded using a browser, such as Persits Software AspUpload available from 
	www.aspupload.com. With this component,
	file uploading becomes a trivial task:
	 
	 
	| <!--This is a file upload form--> <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript.asp">
 <INPUT TYPE=FILE NAME="FILE1">
 <INPUT TYPE=FILE NAME="FILE2">
 <INPUT TYPE=FILE NAME="FILE3">
 <INPUT TYPE=SUBMIT VALUE="Upload!">
 </FORM>
 |  
	 
	| <% ' Corresponding upload script UploadScript.asp
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.Save "c:\uploaddir"
 %>
 |  
	This script captures one or multiple files uploaded with a browser and saves
	them under their original names in the specified directory.
	 
	AspUpload is also capable of capturing text items on the upload form, 
	save uploaded files in the database as blobs, limit the size of files
	being uploaded, etc. Visit AspUpload.com for a complete list of features.
	 
	
	 
	
	If your files contain sensitive information the upload form
	and script must run under the Secure Socket Layer (SSL) for protection
	against eavesdropping. However, once the uploaded files are captured 
	by server-side script and saved to the server's	hard drive they are no longer 
	protected. Although you can encrypt the files after they are uploaded, 
	it is not entirely secure, as it is theoretically possible for an intruder
	to get hold of the files while they are being encrypted.
	
	With the help of AspEncrypt's CryptoKey object, AspUpload is capable of uploading and encrypting files in one step 
	thus making your Web-based file management system truly secure. The following code snippet
	captures the uploaded files and at the same time encrypts them using
	a password-derived key:
	 
	 
	 
	| ' Upload script SecureUpload1.asp <%
 Set Upload = Server.CreateObject("Persits.Upload")
 Set CM = Server.CreateObject("Persits.CryptoManager")
 Set Context = CM.OpenContext("", True )
 Set Key = Context.GenerateKeyFromPassword("My secret password") ' use defaults
 
	Upload.SaveEncrypted "c:\upload", Key, "xxx" 
	For Each File in Upload.FilesResponse.Write "Name=" & File.Path & "; Size=" & File.Size & "<BR>"
 Next
 %>
 |  
	Notice that instead of Upload.Save we call Upload.SaveEncrypted and pass an encryption
	key to it as the second argument. The third argument is an extension that will
	be appended to the original file name to form the name of an encrypted file. For example, 
	the file myfile.txt will be encrypted into the file myfile.txt.xxx. This way the
	original file extension is preserved. 
	The last three lines loop through the Upload.Files collection 
	and display the paths and sizes of the uploaded files.
	 
	
	 
	
	AspUpload allows you to upload a text password along with the files.
	This password will be used by the component to derive an encryption key which
	will be applied to the files being uploaded. This functionality requires a simple
	protocol: your HTML form must have an <INPUT TYPE=TEXT NAME="ENCRYPTPASSWORD"> 
	or <INPUT TYPE=HIDDEN NAME="ENCRYPTPASSWORD"> item 
	through which the password is specified, and this
	item must appear in the form before all <INPUT TYPE=FILE> items. The name
	ENCRYPTPASSWORD is part of the protocol.
	For example:
	
	 
	| <!-- SecureForm2.htm --> <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="SecureUpload2.asp">
 <INPUT TYPE=TEXT NAME="ENCRYPTPASSWORD">
 <INPUT TYPE=FILE NAME="FILE1">
 <INPUT TYPE=FILE NAME="FILE2">
 <INPUT TYPE=FILE NAME="FILE3">
 <INPUT TYPE=SUBMIT VALUE="Upload!">
 </FORM>
 |  
	Although AspUpload generates a key internally based on the specified password,
	your script must still provide the SaveEncrypted method with an empty key object
	as it is this object that gives AspUpload its encryption capabilities: 
	 
	| <% ' Upload script SecureUpload2.asp
 Set Upload = Server.CreateObject("Persits.Upload")
 Set CM = Server.CreateObject("Persits.CryptoManager")
 Set Context = CM.OpenContext("", True )
 Set Key = Context.CreateEmptyKey ' use defaults
 
	Upload.SaveEncrypted "c:\upload", Key, "xxx"%>
 |  
	The method CreateEmptyKey accepts the same optional arguments as GenerateKey. 
	The difference is that the former does not actually create a key inside the key object. AspUpload
	does it internally in the SaveEncrypted method based on the password supplied via the ENCRYPTPASSWORD
	form item. Notice that even if a user does not supply a password the encryption 
	key will be derived from an empty string.
	 
	
	AspUpload enables users to download a file from the web server even
	if this file is not located in a virtual directory. Here is how:
	
	 
	| <!--Put this link on your HTML page--> <A HREF="Download.asp">Download File<A>
 
 |  
	 
	| <% ' Download.asp
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.SendBinary "c:\dir\myfile.txt", True, "application/x-gzip"
 %>
 |  
	If an encrypted file is to be downloaded, we may choose to decrypt it before sending it
	to the client browser. AspUpload enables you to perform both tasks in one
	step thus making a download truly secure:
	 
	 
	| <% ' Download.asp
 Set Upload = Server.CreateObject("Persits.Upload")
 Set CM = Server.CreateObject("Persits.CryptoManager")
 
	Set Context = CM.OpenContext( "", True )Set Key = Context.GenerateKeyFromPassword("My secret password")
 
	Upload.DecryptAndSendBinary "c:\upload\somefile.txt.xxx", _True, "application/x-gzip", Key, True
 %>
 |  
	The DecryptAndSendBinary method is similar to SendBinary except that
	it decrypts the file being downloaded using the specified key (the fourth argument). The last argument
	specified whether the .xxx file extension should be removed from the file name.
	For example, if the file somefile.txt.xxx is being downloaded and the last argument
	is set to True, the user will be offered to save the file under the name somefile.txt.
	 
	    |  |  |  |  |