天天看點

c# wpf 加密文本

可以加密人們的内容,文本加密。

界面

c# wpf 加密文本
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="encryption_note.MainWindow"
        Height="700" Width="405.8" Icon="/resources/bitbug_favicon.ico" WindowStartupLocation="CenterScreen" Title="密碼本" Unloaded="exit_button">
    <Grid x:Name="formMain" KeyDown="fastkey">
        <Grid.RowDefinitions>
            <RowDefinition Height="20*"/>
            <RowDefinition Height="650*"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Menu>
                <MenuItem Header="檔案(_F)">
                    <MenuItem Header="建立(_N)" Click="new_file_button" >

                    </MenuItem>
                    <MenuItem Header="打開(_O)" Click="open_button" > 

                    </MenuItem>
                    <MenuItem Header="儲存(_S)" Click="save_button" IsEnabled="{Binding Path=main_enable,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">

                    </MenuItem>
                    <MenuItem Header="另存為(_A)" Click="save_as_button" IsEnabled="{Binding Path=main_enable,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">

                    </MenuItem>
                    <MenuItem Header="退出(_X)" Click="exit_button" >                       

                    </MenuItem>
                </MenuItem>
                <MenuItem Header="編輯(_E)">                                    
                    <MenuItem Header="全選(_A)" Click="select_button" IsEnabled="{Binding Path=main_enable,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">

                    </MenuItem>
                    <MenuItem Header="複制(_C)" Click="copy_button" IsEnabled="{Binding Path=main_enable,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">

                    </MenuItem>
                    <MenuItem Header="粘貼(_V)" Click="paste_button" IsEnabled="{Binding Path=main_enable,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">


                    </MenuItem>
                </MenuItem>
                <MenuItem Header="幫助(_H)">
                    <MenuItem Header="關于(_A)" >  

                    </MenuItem>
                </MenuItem>
            </Menu>
        </Grid>
        <Grid Grid.Row="1">
            <Grid x:Name="registerGrid" Visibility="{Binding Path=register_visibility,Mode=OneWay}" Background="#FF130464" d:IsHidden="True">
                <StackPanel Orientation="Vertical">
                    <Label x:Name="reminder" HorizontalAlignment="Left" Height="35" Margin="10,270,0,0" Content="{Binding Path=reminder_content,Mode=OneWay}" VerticalAlignment="Top" Width="379" Background="{x:Null}" FontSize="20" BorderBrush="{x:Null}" Foreground="#FFF6F9F7"/>
                    <PasswordBox x:Name="codeIn" Visibility="{Binding Path=codein_visibility,Mode=OneWay}" HorizontalAlignment="Center" Margin="0" VerticalAlignment="Center" FontSize="26.667" Width="383.335" ToolTip="密碼大于10字元"/>
                    <Button x:Name="registerButton" Content="确定" HorizontalAlignment="Right" Height="33.875" Margin="10,10,10,10"  VerticalAlignment="Center" Width="69.633" IsDefault="True" Click="registerButtonClick" />
                </StackPanel>
                <ProgressBar x:Name="progressBar" Visibility="{Binding Path=progress_bar_visibility,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"  IsIndeterminate="True" Height="50" d:IsHidden="True" />
                <!--輸入密碼password_box-->
            </Grid>
            <Grid x:Name="mainGrid" Visibility="{Binding Path=main_visibility,Mode=OneWay}">                             
                <!--顯示密碼text-->
                <TextBox x:Name="source" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding Path=text_string, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextOptions.TextFormattingMode="Display" ScrollViewer.CanContentScroll="True" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" LostFocus="source_lostfocus"/>                
            </Grid>
        </Grid>
    </Grid>
</Window>      
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace encryption_note
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        ViewModel view_model = ViewModel.g_view_model();
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = ViewModel.g_view_model();
            codeIn.Focus();

        }

        private void registerButtonClick(object sender , RoutedEventArgs e)
        {
            progressBar.Visibility = Visibility.Visible;
            view_model.register_button_click(codeIn.Password);
            codeIn.Password = "";
            progressBar.Visibility = Visibility.Hidden;
        }

        /// <summary>
        /// 沒焦點,儲存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void source_lostfocus(object sender, RoutedEventArgs e)
        {
            view_model.new_key();
        }

        private void save_button(object sender, RoutedEventArgs e)
        {
            view_model.new_key();
        }

        private void open_button(object sender, RoutedEventArgs e)
        {
            view_model.open_file();
            codeIn.Focus();
        }

        private void new_file_button(object sender, RoutedEventArgs e)
        {
            view_model.new_file();
        }

        private void save_as_button(object sender, RoutedEventArgs e)
        {
            view_model.save_file();
        }

        private void exit_button(object sender, RoutedEventArgs e)
        {
            view_model.new_key();
            Application.Current.Shutdown();
        }

        private void select_button(object sender, RoutedEventArgs e)
        {
            source.Focus();
            source.SelectAll(); 
        }

        private void copy_button(object sender, RoutedEventArgs e)
        {
            Clipboard.SetText(source.SelectedText);            
        }

        private void paste_button(object sender, RoutedEventArgs e)
        {
            string temp;            
            temp = source.Text.Substring(source.SelectionStart);
            source.Text = source.Text.Substring(0, source.SelectionStart) + Clipboard.GetText() + temp;
        }

        private void fastkey(object sender , KeyEventArgs e)
        {
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
            {
                switch (e.Key)
                {
                    case Key.N:
                        new_file_button(sender , new RoutedEventArgs());
                        break;
                    case Key.S:
                        save_button(sender , new RoutedEventArgs());
                        break;
                    case Key.O:
                        open_button(sender , new RoutedEventArgs());
                        break;
                    default:
                        break;
                }
            }

            if(e.Key==Key.Escape)
            {
                exit_button(sender , new RoutedEventArgs());
            }
        }
    }
}      

把界面的資料綁定

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;


namespace encryption_note
{
    public class ViewModel : INotifyPropertyChanged
    {
        mul_key_encryption mul_key = new mul_key_encryption();
        private ViewModel()
        {
            first = true;
            if (File.Exists(mul_key.file_address))
            {
                first = false;
                reminder_content = "請輸入密碼";
            }
            else
            {
                first = true;
                reminder_content = "第一次使用,請輸入密碼";
            }
            register_visibility = Visibility.Visible;
            main_visibility = Visibility.Hidden;
            //progress_bar_visibility = Visibility.Hidden;
            register = true;
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public Visibility register_visibility
        {
            set
            {
                if (value == Visibility.Visible)
                {
                    _register_visibility = true;
                }
                else if (value == Visibility.Hidden)
                {
                    _register_visibility = false;
                }
                OnPropertyChanged("register_visibility");
            }
            get
            {
                if (_register_visibility == true)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Hidden;
                }
            }
        }
        public Visibility main_visibility
        {
            set
            {
                if (value == Visibility.Visible)
                {
                    _main_visibility = true;
                }
                else if (value == Visibility.Hidden)
                {
                    _main_visibility = false;
                }
                OnPropertyChanged("main_visibility");
                OnPropertyChanged("main_enable");
            }
            get
            {
                if (_main_visibility == true)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Hidden;
                }
            }
        }
        public bool main_enable
        {
            set
            {
                _main_visibility = value;
            }
            get
            {
                return _main_visibility;
            }
        }
        public Visibility progress_bar_visibility
        {
            set
            {
                if (value == Visibility.Visible)
                {
                    register = false;
                }
                else
                {
                    register = true;
                }
                OnPropertyChanged("password_box_visibility");
            }
            get
            {
                if (register == true)
                {
                    return Visibility.Hidden;
                }
                else
                {
                    return Visibility.Visible;
                }
            }
        }
        public Visibility codein_visibility
        {
            set
            {
                if (value == Visibility.Visible)
                {
                    register = true;
                }
                else
                {
                    register = true;
                }
                OnPropertyChanged("codein_visibility");
            }
            get
            {
                if (register == true)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Hidden;
                }
            }
        }
        public string text_string
        {
            set
            {
                _text_string.Clear();
                _text_string.Append(value);
                OnPropertyChanged("text_string");
            }
            get
            {
                return _text_string.ToString();
            }
        }
        public string reminder_content
        {
            set
            {
                _reminder_content.Clear();
                _reminder_content.Append(value);
                OnPropertyChanged("reminder_content");
            }
            get
            {
                return _reminder_content.ToString();
            }
        }
        /// <summary>
        /// true 輸入,不進度條,false不輸入,進度條
        /// </summary>
        public bool register
        {
            set
            {
                _register = value;
                OnPropertyChanged("password_box_visibility");
                OnPropertyChanged("codein_visibility");

            }
            get
            {
                return _register;
            }
        }
        /// <summary>
        /// 第一次使用
        /// </summary>
        public bool first
        {
            set
            {
                _first = value;
            }
            get
            {
                return _first;
            }
        }
        /// <summary>
        /// 進入密碼
        /// </summary>
        public string key
        {
            set
            {
                _key = value;
            }
            get
            {
                return _key;
            }
        }
        public static ViewModel g_view_model()
        {
            if (_view_model == null)
            {
                _view_model = new ViewModel();
            }
            return _view_model;
        }

        public void new_file()
        {
            //mul_key.new_use(key);
            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
            dlg.FileName = "data";
            dlg.DefaultExt = ".data";
            dlg.Filter = "data(.data)|*.data";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                mul_key.file_address = dlg.FileName;
                //mul_key.override_entryption(text_string);
                first = true;
                register_visibility = Visibility.Visible;
                main_visibility = Visibility.Hidden;
                register = true;
                text_string = "";
            }
        }
        public void open_file()
        {            
            new_key();
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.FileName = "data";
            dlg.DefaultExt = ".data";
            dlg.Filter = "data(.data)|*.data";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                mul_key.file_address = dlg.FileName;
                first = false;
                register_visibility = Visibility.Visible;
                main_visibility = Visibility.Hidden;
                register = true;
                text_string = "";
            }
        }
        /// <summary>
        /// 另存為
        /// </summary>
        /// <param name="file_address">檔案位址</param>
        public void save_file()
        {
            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
            dlg.FileName = "data";
            dlg.DefaultExt = ".data";
            dlg.Filter = "data(.data)|*.data";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                mul_key.file_address = dlg.FileName;
                mul_key.override_entryption(text_string);
            }
        }
        /// <summary>
        /// 顯示密碼
        /// </summary>
        public void calculate_key_txt()
        {
            StringBuilder str = new StringBuilder();
            mul_key.jmz_decryption();
            foreach (var temp in mul_key.file_key)
            {
                str.Append(temp);
            }
            text_string = str.ToString();
            Debug.Write(str.ToString());
        }
        /// <summary>
        /// 儲存密碼
        /// </summary>
        public void new_key()
        {
            //mul_key.new_entryption(text_string);   
            Debug.Write("儲存\n");
            if (main_visibility == Visibility.Visible)
            {
                mul_key.override_entryption(text_string);
            }
        }

        public void register_button_click(string key)
        {
            Debug.Write("register\n");
            register = false;
            Debug.Write("key" + key + "\n");
            //progress_bar_visibility = Visibility.Visible;
            if (key.Length > 10 && key.Length < 500)
            {
                if (first == true)
                {
                    //new_file(key);
                    mul_key.new_use(key);
                    register_visibility = Visibility.Hidden;
                    main_visibility = Visibility.Visible;
                }
                else
                {
                    if (mul_key.confirm_password(key))
                    {
                        calculate_key_txt();
                        register_visibility = Visibility.Hidden;
                        main_visibility = Visibility.Visible;
                    }
                    else
                    {
                        reminder_content = "密碼錯誤,請重新輸入";
                    }
                    //Debug.Write("key" + key + "\n");
                }
            }
            else
            {
                reminder_content = "密碼長度必須大于10字元";
            }
            register = true;
        }


        private static ViewModel _view_model = new ViewModel();
        private StringBuilder _text_string = new StringBuilder();
        private StringBuilder _reminder_content = new StringBuilder();
        private bool _first;
        private bool _register;
        private bool _register_visibility;
        private bool _main_visibility;
        private string _key;
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this , new PropertyChangedEventArgs(name));
            }
        }

    }
}      

使用字元串加密類,有公共

屬性 key:密碼

file_address:檔案位址

方法 n_md5(string key) :将key進行n md5,我是用字元串的第一個字元unicode作為n

encryption(string str):加密字元串

decryption(string str):揭秘字元串

using System;
using System.Diagnostics;
using System.Text;

namespace encryption_note
{
    public class string_decryption
    {
        ///需要 using System.IO;    
        private string_decryption()
        {            
            file_address = @".\data.data";
            _temp_string_lenth = 1024;            
        }
        public string_decryption(string file_加密的檔案 , int key_length_more512)
        {
            key_length_more512 = 1024;
            _temp_string_lenth = key_length_more512;

            file_address = file_加密的檔案;            
        }
        public string_decryption(string key)
        {
            int 密鑰_大于512;
            密鑰_大于512 = 1024;
            _temp_string_lenth = 密鑰_大于512;
            this.key = key;
        }

        public static string_decryption g_獲得類()
        {
            return _string_decryption;
        }
        public static string_decryption g_獲得類(string file_加密的檔案)
        {
            _string_decryption = new string_decryption(file_加密的檔案 , 1024);
            return _string_decryption;
        }

        ~string_decryption()
        {


        }

        public string key
        {
            get
            {
                if (_key.Length <= 0)
                {
                    return "林德熙";
                }
                return _key;
            }
            set
            {
                _key = value;
            }
        }
        /// <summary>
        /// 加密檔案絕對位置
        /// </summary>
        public string file_address
        {
            set
            {
                _file_address = value;
            }
            get
            {
                return _file_address;
            }
        }
        private int ran
        {
            set
            {
                _random = new Random(value);
            }
            get
            {
                return _random.Next(2) == 0 ? _random.Next(19968 , 40864) : _random.Next(33 , 126);
            }
        }

        public string encryption(string str)
        {
            char[] temp_str = new char[_temp_string_lenth];
            int i , has , key_place;//has字元位置,key_place密碼位置
            //str = encryptDes(str);
            str += "結束";
            str.PadRight(_temp_string_lenth);
            for (i = 0; i < _temp_string_lenth; i++)
            {
                temp_str[i] = Convert.ToChar(0);
            }
            key_place = 0;
            for (i = 0; i < str.Length; i++)
            {
                has = Convert.ToInt32(key[key_place]);
                has = has % _temp_string_lenth;
                while (temp_str[has] != Convert.ToChar(0))//如果位置有别的字元就下一個,到沒有字元位置
                {
                    has++;
                    if (has >= _temp_string_lenth)
                    {
                        has = 0;
                    }
                    //has=has>=_temp_string_lenth?0:has++;
                }
                //temp_str[l] = (char)(str[i]);//+key[key_l]);
                temp_str[has] = (char)((str[i]) + key[key_place]);
                key_place++;
                if (key_place == key.Length)
                {
                    key_place = 0;
                }
                //key_place=key_place>=key.length?0:key_place++;
            }
            //把空填充
            for (i = 0; i < _temp_string_lenth; i++)
            {
                if (temp_str[i] == Convert.ToChar(0))
                {
                    temp_str[i] = Convert.ToChar(ran); //% 1000+1);
                }
            }
            string s = new string(temp_str);
            return s;
            //return null;
        }
        public string decryption(string str)
        {
            StringBuilder temp = new StringBuilder();
            char[] jie = str.ToCharArray();
            int has , key_place;//has字元位置,key_place密碼位置
            bool accomplish;
            accomplish = false;//初始
            has = 0;
            key_place = 0;
            if (jie.Length < _temp_string_lenth - 1)
            {
                Debug.Write("錯" + jie.Length.ToString());
                return null;
            }
            while (accomplish == false)//我while(true)
            {
                has = Convert.ToInt32(key[key_place]);
                has = has % _temp_string_lenth;//密碼給字元所在位置
                while (jie[has] == Convert.ToChar(0))
                {
                    has++;
                    if (has >= _temp_string_lenth)
                    {
                        accomplish = true;
                        break;
                    }
                }
                if (accomplish)
                {
                    break;
                }               
                temp.Append((char)((jie[has]) - key[key_place]));
                jie[has] = Convert.ToChar(0);//把原來位置0
                key_place++;
                if (key_place == key.Length)
                {
                    key_place = 0;
                }
            }
            string temp_str = temp.ToString();
            int temp_l = temp_str.LastIndexOf("結束");
            if (temp_l > 0)
            {                
                return temp_str.Substring(0 , temp_l);
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 加密key[0].toint次md5
        /// </summary>
        /// <param name="key">密碼</param>
        /// <returns>加密後密碼</returns>
        public string n_md5(string key)
        {
            string temp;
            int i;
            int str_0_length;
            if (string.IsNullOrEmpty(key))
            {
                temp = "";
                return temp.PadRight(32 , '0');
            }
            str_0_length = Convert.ToInt32(key[0]);
            temp = get_MD5(key);
            for (i = 1; i < str_0_length; i++)
            {
                temp = get_MD5(temp);
            }
            return temp;
        }

        private int _temp_string_lenth;
        private static string_decryption _string_decryption = new string_decryption();
        private Random _random = new Random();
        //加密檔案的路徑
        private string _file_address;
        private string _key;       
        /// <summary>
        /// md5加密
        /// </summary>
        /// <param name="str">要加密字元串</param>
        /// <returns>加密後密碼</returns>
        private string get_MD5(string str)
        {
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] temp;
            StringBuilder strb = new StringBuilder();
            temp = md5.ComputeHash(Encoding.Unicode.GetBytes(str));
            md5.Clear();
            for (int i = 0; i < temp.Length; i++)
            {
                strb.Append(temp[i].ToString("X").PadLeft(2 , '0'));
            }
            return strb.ToString().ToLower();            
        }        
    }
}      

這是使用隻是一個字元串的加密,而在字元串很長就不能。

我把一個很長的字元串分割為多個字元串。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace encryption_note
{    
    public class mul_key_encryption
    {
        public mul_key_encryption()
        {
            new_class();
        }
        public mul_key_encryption(string key)
        {
            new_class(key);
        }

        ~mul_key_encryption()
        {
            file_key.Clear();
            decryption.Clear();
        }

        /// <summary>
        /// 預設沒有jia.key 密碼
        /// </summary>
        public List<string> file_key
        {
            set
            {
                _key = value;
            }
            get
            {
                return _key;
            }
        }
        public List<string> decryption
        {
            set
            {
                _decryption = value;
            }
            get
            {
                return _decryption;
            }
        }

        public bool confirm_password(string key)
        {
            int len;
            string temp;
            len = 2048;
            FileStream fs = new FileStream(file_address , FileMode.Open);
            byte[] buffer = new byte[len];
            fs.Read(buffer , 0 , len);//不密碼
            fs.Close();
            temp = Encoding.Unicode.GetString(buffer);
            jia.key = key;            
            return string.Equals(jia.n_md5(key) , jia.decryption(temp));
        }
        /// <summary>
        /// 獲得密碼
        /// </summary>
        /// <returns>儲存下密碼</returns>
        public string jmz_decryption()
        {
            string str;
            str = "";
            file_key.Clear();
            d_scan();
            foreach (string temp in decryption)
            {
                file_key.Add(jia.decryption(temp));
            }
            foreach (string temp in file_key)
            {
                str += temp + "\r\n\r\n";
            }
            return str;
        }
        /// <summary>
        /// 要新增密碼
        /// </summary>
        /// <param name="key">密碼</param>
        public void new_entryption(string key)
        {
            int sub = key.IndexOf("\r\n\r\n");
            string temp;
            while (sub != -1)
            {
                //如果開頭\r\n\r\n那麼直接去空
                temp = key.Substring(0 , sub);
                if (temp.Length > 0)
                {
                    file_key.Add(temp);
                }
                key = key.Substring(sub + 4);
                sub = key.IndexOf("\r\n\r\n");
            }
            file_key.Add(key);
            //加密();
            hold_decryption_key();
        }
        /// <summary>
        /// 覆寫密碼,把原有密碼删掉
        /// </summary>
        /// <param name="key">密碼</param>
        public void override_entryption(string key)
        {
            file_key.Clear();//污染
            while(key.Length>100)
            {                 
                 file_key.Add(key.Substring(0, 100));
                 key = key.Substring(100);
            }
            file_key.Add(key);
            hold_decryption_key();
        }

        public void new_use(string key)
        {           
            jia.key = key;
            file_key.Clear();
            decryption.Clear();
            hold_decryption_key();           
            //x_write();2015年5月12日19:55:57
        }

        /// <summary>
        /// 删除密碼
        /// </summary>
        /// <param name="key">要删除密碼</param>
        /// <returns>如果删除return true;如果沒有return false</returns>
        public bool delete_key(string key)
        {
            return file_key.Remove(key);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="key">密碼号</param>
        /// <returns></returns>
        public bool delete_key(int key)
        {
            if (key < file_key.Count)
            {
                file_key.RemoveAt(key);
                return true;
            }
            return false;
        }
        private string_decryption jia
        {
            set
            {
                value = null;
            }
            get
            {
                return string_decryption.g_獲得類();
            }
        }
        private List<string> _key = new List<string>();
        public string file_address
        {
            set
            {
                jia.file_address = value;
            }
            get
            {
                return jia.file_address;
            }
        }
        private List<string> _decryption = new List<string>();

        private bool new_class()
        {
            new_class("qq123456");
            return true;
        }
        private bool new_class(string key)
        {

            file_address = @".\data.data";
            jia.file_address = file_address;
            jia.key = key;
            return true;
        }

        /// <summary>
        /// 寫加密檔案
        /// </summary>
        ///<param name="str">函數要寫入檔案内容</param>
        /// <returns>如果寫成功傳回true</returns>
        private bool x_write()
        {
            FileStream xiaFile = new FileStream(file_address , FileMode.Create);
            byte[] buf;
            foreach (string temp in decryption)
            {
                buf = Encoding.Unicode.GetBytes(temp);
                xiaFile.Write(buf , 0 , buf.Length);
            }
            decryption.Clear();
            xiaFile.Flush();
            xiaFile.Close();
            return true;
        }
        /// <summary>
        /// 讀檔案
        /// </summary>
        /// <param name="str">讀檔案内容儲存到str</param>
        /// <returns>讀檔案成功傳回true</returns>
        private bool d_scan()
        {
            string temp;
            int len;//檔案長
            len = 2048;
            decryption.Clear();//不污染
            //檔案流
            try
            {
                FileStream fs = new FileStream(file_address , FileMode.Open);
                //緩沖
                byte[] buffer = new byte[len];
                fs.Read(buffer , 0 , len);//不密碼
                while (fs.Read(buffer , 0 , len) != 0)
                {
                    temp = Encoding.Unicode.GetString(buffer);
                    //沒有解密
                    decryption.Add(temp);
                }
                //讓檔案可以被其他打開
                fs.Close();
                return true;
            }
            catch
            {
                //如果檔案被占用,沒有找到檔案
                return false;
            }
        }

        /// <summary>
        /// 添加、删除,可以儲存密碼
        /// </summary>
        private void hold_decryption_key()
        {
            //會污染
            decryption.Clear();
            //啟動密碼 
                                   decryption.Add(jia.encryption(jia.n_md5(jia.key)));
            foreach (string temp in file_key)
            {
                if (temp != null && temp.Length > 0)
                {
                    decryption.Add(jia.encryption(temp));
                }
                //如果密碼空,不儲存
            }
            x_write();
        }

    }
}      
c# wpf 加密文本
c# wpf 加密文本
c# wpf 加密文本
c# wpf 加密文本
c# wpf 加密文本

打開檔案

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.FileName = "data";
            dlg.DefaultExt = ".data";
            dlg.Filter = "data(.data)|*.data";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                 //傳回位址
            }      

儲存檔案

Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
            dlg.FileName = "data";
            dlg.DefaultExt = ".data";
            dlg.Filter = "data(.data)|*.data";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {

            }      

INotifyPropertyChanged

OnPropertyChanged(“屬性”);

void OnPropertyChanged(string name)
    {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this , new PropertyChangedEventArgs(name));
            }
     }
     public event PropertyChangedEventHandler PropertyChanged;