Introduction
In this post I am explain how to upload file with encryption and download file with decryption using asp.net c#?Steps :
Step - 1 : Create New Project.
Go to File > New > Project > Select asp.net web forms application > Entry Application Name > Click OK.Step-2: Add New Folder.
Right Click on Solution Explorer > Add > New Folder > Rename Folder.Step-3: Add a Class.
Right Click on Solution Explorer > Add > Class > Enter Class Name > Add.Here is the class.
            namespace ASPEncryptDecryptFile
            {
                public class UploadFile
                {
                    public string FileName { get; set; }
                    public string FileExtention { get; set; }
                    public long Size { get; set; }
                    public string FilePath { get; set; }
                    public string ICon { get; set; }
                }
            }
        
Step-4: Add a Webpage and Design for upload file with encryption & show in datalist.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select web form/ web form using master page under Web > Enter page name > Add.HTML Code
    <h3>File Upload with encryption and Download with decryption using ASP.NET C#. </h3>
    <div>
        <table>
            <tr>
                <td>Select File : </td>
                <td>
                    <asp:FileUpload ID="FileUpload1" runat="server" /></td>
                <td>
                    <asp:Button ID="btnUpload" runat="server" Text="Upload & Encrypt" OnClick="btnUpload_Click" /></td>
            </tr>
        </table>
        <div>
            <%-- Add Datalist for Show Uploaded Files --%>
            <asp:DataList ID="DataList1" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" OnItemCommand="DataList1_ItemCommand">
                <ItemTemplate>
                    <table>
                        <tr>
                            <td>
                                <img src='<%#Eval("ICon") %>' width="60px" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%#Eval("FileName") %>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%#Eval("Size","{0} KB") %>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Download" CommandArgument='<%#Eval("FilePath") %>'>Download</asp:LinkButton>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:DataList>
        </div>
    </div>
        
Step-5: Write code into page load event for show data.
Write below code into Page_Load event for show uploaded files.        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopulateUploadedFiles();
            }
        }
        
         private void PopulateUploadedFiles()
        {
            DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/UploadedFiles"));
            List<UploadFile> uploadedFiles = new List<UploadFile>();
            foreach (var file in di.GetFiles())
            {
                uploadedFiles.Add
                (
                    new UploadFile
                    {
                         FileName = file.Name,
                          FileExtention = Path.GetExtension(file.Name),
                           FilePath = file.FullName,
                            Size = (file.Length/1024), // For get size in KB
                             ICon = GetIconPath(Path.GetExtension(file.FullName)) // Need to Get Icon...
                    }
                );
            }
            DataList1.DataSource = uploadedFiles;
            DataList1.DataBind();
        }
        
            private string GetIconPath(string fileExtention)
        {
            string Iconpath = "/Images";
            string ext = fileExtention.ToLower();
            switch (ext)
            {
                case ".txt":
                    Iconpath += "/txt.png";
                    break;
                case ".doc":
                case ".docx":
                    Iconpath += "/word.png";
                    break;
                case ".xls":
                case ".xlsx":
                    Iconpath += "/xls.png";
                    break;
                case ".pdf":
                    Iconpath += "/pdf.png";
                    break;
                case ".rar":
                    Iconpath += "/rar.png";
                    break;
                case ".zip":
                case ".7z":
                    Iconpath += "/zip.png";
                    break;
                default:
                    break;
            }
            return Iconpath;
        }
        
Step-6: Write code for Upload file with Encryption.
Write below code into button click event for Upload file with encryption.            protected void btnUpload_Click(object sender, EventArgs e)
        {
            // Add code to upload file with encryption
            byte[] file = new byte[FileUpload1.PostedFile.ContentLength];
            FileUpload1.PostedFile.InputStream.Read(file, 0, FileUpload1.PostedFile.ContentLength);
            string fileName = FileUpload1.PostedFile.FileName;
            // key for encryption
            byte[] Key = Encoding.UTF8.GetBytes("asdf!@#$1234ASDF");
            try
            {
                string outputFile = Path.Combine(Server.MapPath("~/UploadedFiles"), fileName);
                if (File.Exists(outputFile))
                {
                    // Show Already exist Message 
                }
                else
                {
                    FileStream fs = new FileStream(outputFile, FileMode.Create);
                    RijndaelManaged rmCryp = new RijndaelManaged();
                    CryptoStream cs = new CryptoStream(fs, rmCryp.CreateEncryptor(Key, Key), CryptoStreamMode.Write);
                    foreach (var data in file)
                    {
                        cs.WriteByte((byte)data);
                    }
                    cs.Close();
                    fs.Close();
                }
                PopulateUploadedFiles();
            }
            catch 
            {
                Response.Write("Encryption Failed! Please try again.");
            }
        }
        
Step-7: Write code for Download file with decryption.
Write below code into DataList1_ItemCommand event for Download decrypted file.            protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "Download")
            {
                string filePath = e.CommandArgument.ToString();
                // key for decryption
                byte[] Key = Encoding.UTF8.GetBytes("asdf!@#$1234ASDF");
                //UnicodeEncoding ue = new UnicodeEncoding();
                FileStream fs = new FileStream(filePath, FileMode.Open);
                RijndaelManaged rmCryp = new RijndaelManaged();
                CryptoStream cs = new CryptoStream(fs, rmCryp.CreateDecryptor(Key, Key), CryptoStreamMode.Read);
                try
                {
                    // Decrypt & Download Here
                    Response.ContentType = "application/octet-stream";
                    //Response.AddHeader("Content-Disposition","attachment; filename=" + Path.GetFileName(filePath) + Path.GetExtension(filePath));
                    Response.AddHeader("Content-Disposition", "attachment; filename=myfile" + Path.GetExtension(filePath));
                    int data;
                    while ((data = cs.ReadByte()) != -1)
                    {
                        Response.OutputStream.WriteByte((byte)data);
                        Response.Flush();
                        
                    }
                    cs.Close();
                    fs.Close();
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
                finally
                {
                    cs.Close();
                    fs.Close();
                }
            }
        }
        
 

