【实例简介】
利用public属性实现winform窗体传值,具体示例见截图
【实例截图】
文件:590m.com/f/25127180-494083103-bcbd0e(访问密码:551685)
【核心代码】
Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string Form1Text
{
get { return this.textBox1.Text; }
set { this.textBox1.Text = value; }
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
}
}
Form2.cs
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (this.Owner != null)
{
((Form1)this.Owner).Form1Text= this.txtValue.Text;
}
}
private void Form2_Load(object sender, EventArgs e)
{
if (this.Owner != null)
{
this.txtValue.Text = ((Form1)this.Owner).Form1Text;
}
}
}
以下内容无关:
-------------------------------------------分割线---------------------------------------------
绝大多数应用程序都有数据加密保护的需求,存储和保护私密信息最安全的方式就是每次需要加密或解密时都从用户那里得到密码,使用后再丢弃。这种方式每次处理信息时都需要用户输入口令,对于绝大多数用户来说,这种方式是不可取的。因为这要求用户记住很多信息,而用户一般会反复使用同一个密码,从而降低系统的安全性和可用性。因此需要一种加密机制,再不需要用户输入任何信息的情况下也能存储秘密数据,而微软数据保护接口(Data Protection Application Programming Interface,DPAPI)便是满足这种要求的程序接口。
从 Windows 2000 开始,用户程序或操作系统程序就可以直接调用 DPAPI 来加密数据。由于 DPAPI 简单易用且加密强大,大量应用程序都采用 DPAPI 加密用户的私密数据,如 Chrome 浏览器的自动登陆密码、远程桌面的自动登陆密码、Outlook邮箱的账号密码、加密文件系统的私钥等。DPAPI 内部加密流程异常复杂而且微软官方也未公布过其内部细节,这给理解该接口内部实现机制带来了极大困难。
0x01 何为DPAPI
DPAPI 英文全称:Data Protection API ,顾名思义就是用来保护数据的接口。这个接口在windows中大量的使用来加密数据,比如chrome的cookies和login data。
1.DPAPI 使用了叫做Master Key的东西,用来解密和加密。Master Key 并不会存在在磁盘上,是通过用户的密码HASH加密生成。
2.Master Key 的第一种实现方式用用户NTLM Hash来加密。由于NTLM Hash在Windows中有着各种重要的作用,而且NTLM Hash是存储在SAM文件中,只要攻击者获取到Hash就可以用来生成Master Key来解密数据了。所以为了防止这样的事,就有了第二种:直接用用户密码生成,函数:SHA‑1(UTF16LE(user_password)) 。
就算攻击者获取到NTLM,如果不能解密出用户的密码不能生成Master Key。