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

界面

<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

c# wpf 加密文本的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  3. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  4. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  7. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

随机推荐

  1. Ubuntu 16.04修改ssh端口

    1 安装防火墙 sudo apt-get install ufw启用 sudo ufw enable sudo ufw default deny 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的 ...

  2. [CSP-S模拟测试]:bird(线段树优化DP)

    题目传送门(内部题89) 输入格式 第一行两个数$n$和$k$,分别表示小鸟的只数和$R$装弹时间.接下来$n$行,每行两个数$l,r$表示$n$只小鸟初始时的头和尾的$x$坐标. 输出格式 输出一个 ...

  3. JavaScript Map 和 Object 的区别

    不同点 Key filed 在 Object 中, key 必须是简单数据类型(整数,字符串或者是 symbol),而在 Map 中则可以是 JavaScript 支持的所有数据类型,也就是说可以用一 ...

  4. 【机器学习速成宝典】模型篇03逻辑斯谛回归【Logistic回归】(Python版)

    目录 一元线性回归.多元线性回归.Logistic回归.广义线性回归.非线性回归的关系 什么是极大似然估计 逻辑斯谛回归(Logistic回归) 多类分类Logistic回归 Python代码(skl ...

  5. Oracle JET 使用RequireJS第三方工具或库引入

    在 Oracle JET 应用程序中使用 RequireJS 添加第三方工具或库. 步骤: 1.如果使用工具框架脚手架,需要一下操作. a.使用 npm 安装你需要的库. npm install my ...

  6. 搜索引擎算法研究专题六:HITS算法

    搜索引擎算法研究专题六:HITS算法 2017年12月19日 ⁄ 搜索技术 ⁄ 共 1240字 ⁄ 字号 小 中 大 ⁄ 评论关闭   HITS(Hyperlink-Induced Topic Sea ...

  7. association实现懒加载分段级联查询

    这里讲的是人员和部门进行级联分布查询 1.首先在mybatis-config.xml里进行配置 <settings> <!--显示的指定每个我们需要更改的配置的值,即使他是默认的.防 ...

  8. BDD Cucumber 实战

    cucumber cucumber 是一个用于执行 BDD 的自动化测试工具. 用户指南 创建 Spring Boot 项目并引入依赖 <?xml version="1.0" ...

  9. 在VSCode中开启ESLint风格审查

    最近一直在学习开发一个VUE项目,几乎没有前端基础摸爬滚打,就一边摸索HTML,JS,CSS一边模仿着已有代码开发,也还算能学到东西. VSCode确实还不错,很轻量.在刚开始学写vue的时候,后台总 ...

  10. Selenium学习之==>ActionChainsApi接口详解

    ActionChains UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,Selenium给我们提供了Ac ...