码迷,mamicode.com
首页 > 其他好文 > 详细

步步为营-17-FileStream-文件加密/解密

时间:2017-04-16 20:28:50      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:names   ring   play   message   进度条   解密   读取   desktop   max   

以前使用的File是操作小的文本文件,用的并不常见,FileStream(操作字节),可以操作所有格式的文件,用途较广泛

下面做一个通过文件流给文件加密解密的小软件. 

技术分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 文件加密
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "请选择要加密的文件";
            //初始路径
            ofd.InitialDirectory = @"C:\Users\home\Desktop";
            ofd.Filter = "所有文件|*.*";
            ofd.ShowDialog();
            txtFile.Text = ofd.FileName;
        }

        private void btnCode_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Title = "请选择要保存文件的路径";
            sfd.InitialDirectory = @"C:\Users\home\Desktop";
            sfd.Filter = "所有文件|*.*";
            sfd.ShowDialog();
            txtCodeFile.Text = sfd.FileName;

            //调用方法
            MakeCode( "加密");
        }
        private void btnUnCode_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Title = "请选择要保存文件的路径";
            sfd.InitialDirectory = @"C:\Users\home\Desktop";
            sfd.Filter = "所有文件|*.*";
            sfd.ShowDialog();
            txtCodeFile.Text = sfd.FileName;

            //调用方法
            MakeCode("解密");
        }

        public void MakeCode(string content) 
        {
            //1 先读取文件
            using (FileStream fsRead = new FileStream(txtFile.Text.Trim(), FileMode.OpenOrCreate, FileAccess.Read))
            {
                using (FileStream fsWrite = new FileStream(txtCodeFile.Text.Trim(), FileMode.OpenOrCreate, FileAccess.Write))
                {
                    //设置进度条
                    progressBar1.Maximum = (int)fsRead.Length;

                    byte[] buffer = new byte[1024 * 1024 * 5];
                    while (true)
                    {
                        int r = fsRead.Read(buffer, 0, buffer.Length);
                        if (r == 0)
                        {
                            break;
                        }
                        byte passWord = 0;
                        if (byte.TryParse(txtPassword.Text.Trim(), out passWord)&& content.Equals("加密"))
                        {
                            for (int i = 0; i < buffer.Length; i++)
                            {
                                buffer[i] += passWord;
                            }
                        }
                        if (byte.TryParse(txtPassword.Text.Trim(), out passWord) && content.Equals("解密"))
                        {
                            for (int i = 0; i < buffer.Length; i++)
                            {
                                buffer[i] -= passWord;
                            }
                        }

                        fsWrite.Write(buffer, 0, r);
                        progressBar1.Value = (int)fsWrite.Length;
                    }
                }
                MessageBox.Show("保存成功!");
            }
        }
      
       
    }
}
View Code

1 将普通视频文件通过此工具加密

技术分享

2 现在打开文件

技术分享

3 解密成功后打开文件

技术分享

 

步步为营-17-FileStream-文件加密/解密

标签:names   ring   play   message   进度条   解密   读取   desktop   max   

原文地址:http://www.cnblogs.com/YK2012/p/6719597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!