程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 件流操作實現文件加密(有源碼)

件流操作實現文件加密(有源碼)

編輯:.NET實例教程

      在對文件流的使用中我們主要用到了filestream 類; 在參數中指名其文件路徑後我們還需要定義它的工作方式;(filemode.open)讀文件流;(filemode.create)寫文件流;要實現加密我們首先要拿到文件的數據內容(在內存中),因為我們在之前對文件定義了讀的形式,那麼我們就可以在內存中開辟一組byte類型的數組以存放文件流。 接下來的事情就都好說了,既然我能把流數據放入內存中,我們就可以改寫內存中的數據值(byte值)來對文件數據進行逐個改寫;這就是簡單的加密思想。

實現過程:我們先添加一個類(以oop思想編程)“manager.cs”

public bool addkeyWord(string filename)
       {
           FileStream sread = new FileStream(filename,FileMode.Open );                                                          
           int length = (int)sread.Length;
           byte[ ] buffer = new byte[length];
           sread.Read(buffer, 0, length);
           sread.Close();                                   /// 注意一定不要忘了關流,否則流一直被占用,其它操作就做不了了;
           byte [ ]buffer2=new byte [length ];   ///再定義一個與其等長度的byte[ ]
           int m = length;
           for (int i = 0; i < length; i++) ///通過循環對每個流數據進行了一次改寫;
           {
               buffer2[i] =buffer[m-1];     ///通過順序的調換實現了文件的加密;至於算法方面大家可以自己想;
               m--;
           }
          
         
           FileStream swt = new FileStream(filename,FileMode.Create );
           swt.Write(buffer2, 0, length);       ///最後將調換後的文件流重新寫回;
           swt.Close();
           return true;
       }

    至於解密過程也就是它的反過程啦!在這裡本人只給出了核心過程;有什麼該完善的地方望大家提出寶貴的意見,也可以發email:[email protected] 與我聯系;這是我的第一份博客,以後望大家多多支持;謝謝了!!!



 public partial class Form2 : Form
    ...{
        public Form2()
        ...{
            InitializeComponent();
        }

        filemanager.manager fm = new filemanager.manager();
        /**//// <summary>
        /// 執行加密:
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        ...{

            string filename = this.textBox1.Text;
            bool var = fm.addkeyWord(filename);
            if (var)
            ...{
                MessageBox.Show("加密完成!");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        ...{
     &n;      OpenFileDialog ofp = new OpenFileDialog();
            ofp.ShowDialog();
            this.textBox1.Text = ofp.FileName;
        }
        /**//// <summary>
        /// 執行解密;
        /// </summary>
        public void resolve()
        ...{
            ArrayList alist = new ArrayList();
            alist.Add("正");
            alist.Add("在");
            alist.Add("校");
            alist.Add("驗");
            alist.Add("您");
            alist.Add("的");
            alist.Add("口");
            alist.Add("令");
            alist.Add(".");
            alist.Add("..");
            alist.Add("..");
            this.label1.Text = "";
            for (int i = 0; i < alist.Count; i++)
            ...{
                
                this.label1.Text += alist[i].ToString();
                Thread.Sleep(200);
            }
            if (this.textBox2.Text == "hhrong2312")
            ...{
                fm.solverescue(this.textBox1.Text);
                MessageBox.Show("解密成功");
                
            }
            else
            ...{
                MessageBox.Show("口令不正確");
            }
        }

        public void showtimes()
        ...{
            while (true)
            ...{
                this.label2.Text = DateTime.Now.ToString();
                Thread.Sleep(1000);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        ...{
            Thread th = new Thread(new ThreadStart(resolve));
            th.Start();
            //th.Abort();
        }

        private void Form2_Load(object sender, EventArgs e)
        ...{
            Thread th = new Thread(new ThreadStart(showtimes));
            th.Start();
        }
    }

 Manager.cs   類  :由form頁負責調用:

 



 /**//// <summary>
       /// 加密過程:
       /// </summary>
       /// <param name="filename"></param>
       /// <returns></returns>
       public bool addkeyWord(string filename)
       ...{
           FileStream sread = new FileStream(filename,FileMode.Open );
           int length = (int)sread.Length;
           byte[] buffer = new byte[length];
           sread.Read(buffer, 0, length);
           sread.Close();
           byte []buffer2=new byte [length ];
           int m = length;
           //int m = 5;
           for (int i = 0; i < length; i++)
           ...{
               buffer2[i] =buffer[m-1];
               m--;
           }
           
          
           FileStream swt = new FileStream(filename,FileMode.Create );
           swt.Write(buffer2, 0, length);
           swt.Close();
           return true;
       }
       /**//// <summary>
       /// 解密過程
       /// </summary>
       /// <param name="filename"></param>
       /// <returns></returns>
       public bool solverescue(string filename)
       ...{
           FileStream sread = new FileStream(filename, FileMode.Open);
           int length=(int)sread .Length ;
           byte[] buffer = new byte[length];
           byte[] buffer2 = new byte[length];
           sread.Read(buffer, 0, length);
           sread.Close();
           int m = length;
           for (int i = 0; i < length; i++)
           ...{
               buffer2[i] = buffer[m - 1];
               m--;
           }


           FileStream swt = new FileStream(filename, FileMode.Create);
           swt.Write(buffer2, 0, length);
           swt.Close();
           return true;
       }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved