分享
 
 
 

用DES加密数据库信息,增强Asp.net的安全性(2)--实现源码

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

using System.Text;

using System.Xml;

using System.Security.Cryptography;

namespace writeconfig

{

/// <summary>

/// Form1 的摘要说明。

/// </summary>

public class frmMain : System.Windows.Forms.Form

{

private System.Windows.Forms.Label labserver;

private System.Windows.Forms.Label labdatabase;

private System.Windows.Forms.Label labuser;

private System.Windows.Forms.Label labpassword;

private System.Windows.Forms.TextBox txtserver;

private System.Windows.Forms.TextBox txtdatabase;

private System.Windows.Forms.TextBox txtuser;

private System.Windows.Forms.TextBox txtpassword;

private System.Windows.Forms.Button btnRead;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox txtfile;

private System.Windows.Forms.Button btnWrite;

private System.Windows.Forms.Button btnLook;

private System.Windows.Forms.OpenFileDialog ofd;

private System.Windows.Forms.Label labkey;

private System.Windows.Forms.TextBox txtkey;

private FileInfo fi;

private bool Find;

private string password="";

protected string keypassword="";

private System.Windows.Forms.Button btnDeleteNode;

/// <summary>

/// 必需的设计器变量。

/// </summary>

private System.ComponentModel.Container components = null;

public frmMain()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

int[] tmp=new int[8]{23,234,195,165,201,240,143,198};

foreach(int i in tmp)

{

keypassword+=((char)i).ToString();

}

}

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows 窗体设计器生成的代码

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmMain));

this.labserver = new System.Windows.Forms.Label();

this.labdatabase = new System.Windows.Forms.Label();

this.labuser = new System.Windows.Forms.Label();

this.labpassword = new System.Windows.Forms.Label();

this.txtserver = new System.Windows.Forms.TextBox();

this.txtdatabase = new System.Windows.Forms.TextBox();

this.txtuser = new System.Windows.Forms.TextBox();

this.txtpassword = new System.Windows.Forms.TextBox();

this.btnRead = new System.Windows.Forms.Button();

this.btnWrite = new System.Windows.Forms.Button();

this.txtfile = new System.Windows.Forms.TextBox();

this.label1 = new System.Windows.Forms.Label();

this.btnLook = new System.Windows.Forms.Button();

this.ofd = new System.Windows.Forms.OpenFileDialog();

this.labkey = new System.Windows.Forms.Label();

this.txtkey = new System.Windows.Forms.TextBox();

this.btnDeleteNode = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// labserver

//

this.labserver.Location = new System.Drawing.Point(21, 57);

this.labserver.Name = "labserver";

this.labserver.Size = new System.Drawing.Size(87, 14);

this.labserver.TabIndex = 0;

this.labserver.Text = "服务器:";

//

// labdatabase

//

this.labdatabase.Location = new System.Drawing.Point(21, 93);

this.labdatabase.Name = "labdatabase";

this.labdatabase.Size = new System.Drawing.Size(87, 14);

this.labdatabase.TabIndex = 1;

this.labdatabase.Text = "数据源:";

//

// labuser

//

this.labuser.Location = new System.Drawing.Point(21, 129);

this.labuser.Name = "labuser";

this.labuser.Size = new System.Drawing.Size(87, 14);

this.labuser.TabIndex = 2;

this.labuser.Text = "用户名:";

//

// labpassword

//

this.labpassword.Location = new System.Drawing.Point(21, 165);

this.labpassword.Name = "labpassword";

this.labpassword.Size = new System.Drawing.Size(87, 14);

this.labpassword.TabIndex = 3;

this.labpassword.Text = "密 码:";

//

// txtserver

//

this.txtserver.Location = new System.Drawing.Point(117, 50);

this.txtserver.Name = "txtserver";

this.txtserver.Size = new System.Drawing.Size(187, 25);

this.txtserver.TabIndex = 4;

this.txtserver.Text = "";

//

// txtdatabase

//

this.txtdatabase.Location = new System.Drawing.Point(117, 86);

this.txtdatabase.Name = "txtdatabase";

this.txtdatabase.Size = new System.Drawing.Size(187, 25);

this.txtdatabase.TabIndex = 4;

this.txtdatabase.Text = "";

//

// txtuser

//

this.txtuser.Location = new System.Drawing.Point(117, 122);

this.txtuser.Name = "txtuser";

this.txtuser.Size = new System.Drawing.Size(187, 25);

this.txtuser.TabIndex = 4;

this.txtuser.Text = "";

//

// txtpassword

//

this.txtpassword.Location = new System.Drawing.Point(117, 158);

this.txtpassword.Name = "txtpassword";

this.txtpassword.PasswordChar = '*';

this.txtpassword.Size = new System.Drawing.Size(187, 25);

this.txtpassword.TabIndex = 4;

this.txtpassword.Text = "";

this.txtpassword.TextChanged += new System.EventHandler(this.txtpassword_TextChanged);

//

// btnRead

//

this.btnRead.Location = new System.Drawing.Point(320, 154);

this.btnRead.Name = "btnRead";

this.btnRead.Size = new System.Drawing.Size(100, 29);

this.btnRead.TabIndex = 5;

this.btnRead.Text = "读配置";

this.btnRead.Click += new System.EventHandler(this.btnRead_Click);

//

// btnWrite

//

this.btnWrite.Location = new System.Drawing.Point(320, 191);

this.btnWrite.Name = "btnWrite";

this.btnWrite.Size = new System.Drawing.Size(100, 28);

this.btnWrite.TabIndex = 5;

this.btnWrite.Text = "写配置";

this.btnWrite.Click += new System.EventHandler(this.btnWrite_Click);

//

// txtfile

//

this.txtfile.Location = new System.Drawing.Point(117, 14);

this.txtfile.Name = "txtfile";

this.txtfile.Size = new System.Drawing.Size(187, 25);

this.txtfile.TabIndex = 6;

this.txtfile.Text = "请选择目录下Web.config文件";

//

// label1

//

this.label1.Location = new System.Drawing.Point(21, 21);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(96, 14);

this.label1.TabIndex = 3;

this.label1.Text = "配置文件:";

//

// btnLook

//

this.btnLook.Location = new System.Drawing.Point(320, 13);

this.btnLook.Name = "btnLook";

this.btnLook.Size = new System.Drawing.Size(100, 28);

this.btnLook.TabIndex = 7;

this.btnLook.Text = "浏览...";

this.btnLook.Click += new System.EventHandler(this.btnLook_Click);

//

// ofd

//

this.ofd.Filter = "Web配置文件|web.config";

//

// labkey

//

this.labkey.Location = new System.Drawing.Point(21, 201);

this.labkey.Name = "labkey";

this.labkey.Size = new System.Drawing.Size(96, 14);

this.labkey.TabIndex = 3;

this.labkey.Text = "读写节值:";

//

// txtkey

//

this.txtkey.Location = new System.Drawing.Point(117, 194);

this.txtkey.Name = "txtkey";

this.txtkey.Size = new System.Drawing.Size(187, 25);

this.txtkey.TabIndex = 4;

this.txtkey.Text = "ConnStr";

//

// btnDeleteNode

//

this.btnDeleteNode.Location = new System.Drawing.Point(320, 119);

this.btnDeleteNode.Name = "btnDeleteNode";

this.btnDeleteNode.Size = new System.Drawing.Size(100, 28);

this.btnDeleteNode.TabIndex = 5;

this.btnDeleteNode.Text = "删除节";

this.btnDeleteNode.Visible = false;

this.btnDeleteNode.Click += new System.EventHandler(this.btnDeleteNode_Click);

//

// frmMain

//

this.AutoScaleBaseSize = new System.Drawing.Size(8, 18);

this.ClientSize = new System.Drawing.Size(437, 239);

this.Controls.Add(this.btnLook);

this.Controls.Add(this.txtfile);

this.Controls.Add(this.btnRead);

this.Controls.Add(this.txtserver);

this.Controls.Add(this.labpassword);

this.Controls.Add(this.labuser);

this.Controls.Add(this.labdatabase);

this.Controls.Add(this.labserver);

this.Controls.Add(this.txtdatabase);

this.Controls.Add(this.txtuser);

this.Controls.Add(this.txtpassword);

this.Controls.Add(this.btnWrite);

this.Controls.Add(this.label1);

this.Controls.Add(this.labkey);

this.Controls.Add(this.txtkey);

this.Controls.Add(this.btnDeleteNode);

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

this.MaximizeBox = false;

this.MinimizeBox = false;

this.Name = "frmMain";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "数据库连接配置";

this.Load += new System.EventHandler(this.Form1_Load);

this.ResumeLayout(false);

}

#endregion

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new frmMain());

}

private void Form1_Load(object sender, System.EventArgs e)

{

}

private void btnLook_Click(object sender, System.EventArgs e)

{

ofd.ShowDialog();

txtfile.Text=ofd.FileName;

}

private bool inittxtfile()

{

txtfile.Text=txtfile.Text.Trim();

if(txtfile.Text=="")

{

txtfile.Text=System.Environment.CurrentDirectory+@"web.config";

}

fi=new FileInfo(txtfile.Text);

if(!fi.Exists)

{

MessageBox.Show("没有找到配置文件!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return false;

}

else

{

return true;

}

}

private void btnWrite_Click(object sender, System.EventArgs e)

{

if(!inittxtfile())

{

return;

}

if((txtserver.Text.Trim()=="")||(txtdatabase.Text.Trim()=="")||(txtuser.Text.Trim()==""))

{

MessageBox.Show("写配置失败,配置信息不完整!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

Find=false;

XmlDocument xd=new XmlDocument();

xd.Load(fi.FullName);

XmlNodeList nodeList=null;

try

{

nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点

}

catch

{

MessageBox.Show("写配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

//连接字符串

string orgstr="server="+txtserver.Text.Trim()+";uid="+txtuser.Text.Trim()+";database="+txtdatabase.Text.Trim()+";pwd="+password+"";

string str= Encrypt(orgstr,keypassword);

foreach(XmlNode Node in nodeList)

{

XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型

if(xe.GetAttribute("key")==txtkey.Text.Trim())

{

xe.Attributes["value"].Value = str;

Find=true;

break;

}

}

if(Find)

{

xd.Save(txtfile.Text);

MessageBox.Show("写配置成功!","配置成功",MessageBoxButtons.OK,MessageBoxIcon.Information);

}

else

{

//未找到节点,建立节点

XmlNode xn=xd.SelectSingleNode("/configuration/appSettings");

XmlElement elem = xd.CreateElement("and");

elem.SetAttribute("key",txtkey.Text.Trim());

elem.SetAttribute("value",str);

try

{

xn.AppendChild(elem);

xd.Save(fi.FullName);

MessageBox.Show("写配置成功!","配置成功",MessageBoxButtons.OK,MessageBoxIcon.Information);

}

catch

{

MessageBox.Show("写配置失败,可能文件权限不够!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

}

}

}

private void btnRead_Click(object sender, System.EventArgs e)

{

if(!inittxtfile())

{

return;

}

Find=false;

XmlDocument xd=new XmlDocument();

xd.Load(fi.FullName);

XmlNodeList nodeList=null;

try

{

nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点

}

catch

{

MessageBox.Show("读配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

string readstr="";

foreach(XmlNode Node in nodeList)

{

XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型

if(xe.GetAttribute("key")==txtkey.Text.Trim())

{

readstr=xe.Attributes["value"].Value;

Find=true;

break;

}

}

if(!Find)

{

MessageBox.Show("读配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

#region 读配置并解析

string connstr=Decrypt(readstr,keypassword);

string [] tmp2=connstr.Split(new char[]{';','='});

for(int i=0;i<tmp2.Length;i+=2)

{

if((tmp2[i].ToLower()=="server")||(tmp2[i].ToLower()=="data source"))

{

txtserver.Text=tmp2[i+1];

}

else if((tmp2[i].ToLower()=="uid")||(tmp2[i].ToLower()=="userid"))

{

txtuser.Text=tmp2[i+1];

}

else if((tmp2[i].ToLower()=="database")||(tmp2[i].ToLower()=="initial catalog"))

{

txtdatabase.Text=tmp2[i+1];

}

else if((tmp2[i].ToLower()=="pwd")||(tmp2[i].ToLower()=="password"))

{

txtpassword.Text="*******************";

password=tmp2[i+1];

}

continue;

}

#endregion

}

#region 加密方法

public string Encrypt(string pToEncrypt, string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

//建立加密对象的密钥和偏移量

//原文使用ASCIIEncoding.ASCII方法的GetBytes方法

//使得输入密码必须输入英文文本

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();

foreach(byte b in ms.ToArray())

{

ret.AppendFormat("{0:X2}", b);

}

ret.ToString();

return ret.ToString();

}

#endregion

#region 解密方法

public string Decrypt(string pToDecrypt, string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

for(int x = 0; x < pToDecrypt.Length / 2; x++)

{

int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

inputByteArray[x] = (byte)i;

}

//建立加密对象的密钥和偏移量,此值重要,不能修改

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

StringBuilder ret = new StringBuilder();

return System.Text.Encoding.Default.GetString(ms.ToArray());

}

#endregion

private void txtpassword_TextChanged(object sender, System.EventArgs e)

{

password=txtpassword.Text.Trim();

}

private void btnDeleteNode_Click(object sender, System.EventArgs e)

{

if(!inittxtfile())

{

return;

}

XmlDocument xd=new XmlDocument();

xd.Load(fi.FullName);

XmlNodeList nodeList=null;

try

{

nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点

}

catch

{

MessageBox.Show("删除配置节失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

int ClearNodes=0;

foreach(XmlNode Node in nodeList)

{

XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型

if(xe.GetAttribute("key")==txtkey.Text.Trim())

{

Node.RemoveAll();

ClearNodes++;

}

}

if(ClearNodes>0)

{

xd.Save(txtfile.Text);

MessageBox.Show("删除配置节成功!","删除成功",MessageBoxButtons.OK,MessageBoxIcon.Information);

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有