c# wpf 加密文本
来源:互联网 发布:桌面壁纸软件那个好 编辑:程序博客网 时间:2024/06/05 12:46
可以加密人们的内容,文本加密。
界面
<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(); } }}
打开文件
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;
原本我的加密 http://blog.csdn.net/lindexi_gd/article/details/45419195
源代码
https://code.csdn.net/lindexi_gd/encryption_note
2 0
- c# wpf 加密文本
- c#文本加密的程序代码(转)
- C# WPF 快速开发16密码MD5加密
- 文本加密
- 加密.文本.
- 文本加密
- c# wpf
- WPF之格式化文本
- WPF 文本拼写检查
- WPF TextBlock 文本 动画
- WPF 文本的呈现
- WPF 自定义文本列表
- WPF-创建超链接文本
- VB文本加密类
- 文本动态随机加密
- 简单的文本加密
- 文本加密器
- C# 加密
- linux shell 之if
- c语言内存组成
- codeblocks调试出现问题原因
- IOC的形象解释
- Linux下vim配置文件(无第三方插件版本)
- c# wpf 加密文本
- HBASE failed to start master 解决方案
- MyEclipse中的android环境配置
- LeetCode 144 : Binary Tree Preorder Traversal
- C++ primer plus 练习 7.8b
- hdu 1233 还是畅通工程
- 数值的二进制输出
- 策略模式(Strategy)
- 五子棋