国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C# WindowsForm編程中MD5加密的設(shè)計(jì)與實(shí)現(xiàn)

2013-04-29 00:44:03黃毅,楊朔,陳進(jìn)原,許錦才
計(jì)算機(jī)時(shí)代 2013年6期
關(guān)鍵詞:窗體控件賬號(hào)

黃毅,楊朔,陳進(jìn)原,許錦才

摘 要: C#是可用于創(chuàng)建要運(yùn)行在.NET CLR上的應(yīng)用程序的語(yǔ)言之一。C#從C和C++語(yǔ)言演化而來(lái),是Microsoft專門為使用.NET平臺(tái)而創(chuàng)建的。MD5加密一般用于登錄驗(yàn)證或者數(shù)據(jù)庫(kù)密碼的存儲(chǔ)。文章對(duì)C#的WindowsForm編程和MD5加密作了簡(jiǎn)要介紹,然后通過(guò)WindowsForm編程實(shí)現(xiàn)了對(duì)MD5密碼加密的應(yīng)用,最后完成了所設(shè)計(jì)的業(yè)務(wù)流程。

關(guān)鍵詞: .NET CLR; MD5加密; 登錄驗(yàn)證; WindowsForm編程

中圖分類號(hào):TP391.1 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)06-09-04

Design and implementation of MD5 cryptographic in C# WindowsForm programming

Huang Yi1, Yang Shuo2, Chen Jinyuan2, Xu Jincai2

(1. Hangzhou Dianzi University, Hangzhou, Zhejiang 310018, China; 2. Zhejiang Topcheer Information Technology Co.,Ltd)

Abstract: C# is one of computer languages which can be used to create one kind application programs running on the .NETCLR. It is evolved from the C and the C++ languages and created by Microsoft for the .Net platform. MD5 encryption is commonly used for login validation and storage of database passwords. In this paper, WindowsForm programming of C# and MD5 encryption are introduced roughly. The application of MD5 password encryption is realized through WindowsForm programming. Finally the design of business process is completed.

Key words: .NET CLR; MD5 encryption; login validation; WindowsForm programming

0 引言

我們?cè)陂_發(fā)網(wǎng)站或登錄網(wǎng)站的時(shí)候,必定會(huì)考慮到個(gè)人信息保密的問(wèn)題,所以設(shè)置密碼和加密操作也是必須的?,F(xiàn)在最流行的加密算法曾被認(rèn)為是最安全的MD5算法,是一種不可逆的算法,對(duì)于密文幾乎不能還原成明文。倘若我們不對(duì)密碼進(jìn)行加密,數(shù)據(jù)的存儲(chǔ)方式就是以明文的形式存放的,別人很容易就能獲取密碼。本文對(duì)C# WindowsForm編程和MD5加密做了介紹,通過(guò)其相關(guān)技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了MD5相關(guān)加密的業(yè)務(wù)流程。

1 C# WindowsForm

自從.Net平臺(tái)發(fā)布(約2001年)以來(lái),基礎(chǔ)類庫(kù)中就包含了叫做Windows Forms(包含在用于構(gòu)建Ssytem.Windows.Form.dll程序集中)的API。Windows Form 由上百個(gè)類型(類、接口、結(jié)構(gòu)、枚舉和委托)組成,這些類型都分散在System.Windows.Form.dll程序集各種命名空間中,如圖1所示。

在System.Windows.Forms里的數(shù)百個(gè)類型可以分成以下幾個(gè)大類。

⑴ 核心架構(gòu):其展現(xiàn)了WindowsForms程序的核心操作。

⑵ 控件:這些類型用來(lái)建立圖形用戶界面。

⑶ 組件:可為Windows Forms提供可視特性,其在運(yùn)行時(shí)不可見,但在設(shè)計(jì)時(shí)可以被可視化配置。

⑷ 公共對(duì)話框:Windows Froms為公共操作提供了許多對(duì)話框[1]。

圖1 System.Windows.Forms.dll中的命名空間

在WindowsForm中,主要就是窗體的設(shè)計(jì)和相應(yīng)控件的應(yīng)用。通過(guò)對(duì)控件之間的合理組合就可以構(gòu)造出一個(gè)符合要求的窗體。常用的控件有:Button控件(按鈕),Label(標(biāo)簽),LinkLabel(鏈接標(biāo)簽),TextBox(文本框),RadioButton(單選按鈕),CheckBox(復(fù)選框)。在對(duì)于各種控件,其相應(yīng)的事件也很多,在本文中主要使用了Click事件即點(diǎn)擊事件。

2 MD5加密

MD5在90年代初由MIT的計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室和RSA Data Security Inc發(fā)明,經(jīng)過(guò)MD2、MD3、和MD4發(fā)展而來(lái)[2]。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被“壓縮”成一種保密格式(把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的大整數(shù)),MD5最廣泛被用于各種軟件的密碼認(rèn)證和鑰匙識(shí)別上面,通俗地講是解釋人們所說(shuō)的序列號(hào)[3]。

2.1 MD5原理

Message-Digest泛指字節(jié)串的(Message)的Hash變換,也稱為單向散列函數(shù),解釋把一個(gè)任意長(zhǎng)度的“字符串”變換成一定長(zhǎng)的大整數(shù),這種變換只與字節(jié)的值有關(guān),與字符集或編碼方式無(wú)關(guān)。MD5將任意長(zhǎng)度的“字節(jié)串”變換成一個(gè)128bit的大整數(shù),并且它是一個(gè)不可逆的字符串變換算法。換言之,即使看到了源程序和算法描述,也無(wú)法將一個(gè)MD5的值變換回原始的字符串;從數(shù)學(xué)原理上說(shuō),是因?yàn)樵嫉淖址袩o(wú)窮多個(gè),這有點(diǎn)像不存在反函數(shù)的數(shù)學(xué)函數(shù)??梢钥闯鯩D5加密后是無(wú)法進(jìn)行解密的(也不是絕對(duì)的),例如一個(gè)string,利用MD5算法進(jìn)行加密后是無(wú)法將它還原為原來(lái)的string[4]。如果數(shù)據(jù)不采用任何算法進(jìn)行加密的話,數(shù)據(jù)的存儲(chǔ)方式是以明文形式存放的,意味著數(shù)據(jù)有很大的可能性被泄露,但是如果數(shù)據(jù)經(jīng)過(guò)加密,所看到的也只是一堆毫無(wú)排列順序的數(shù)字或字符。

2.2 MD5加密的效果

使用MD5加密有一個(gè)特點(diǎn),就是同一個(gè)string在同樣的編碼方式下加密的結(jié)果是一樣的,所以可以為任何文件產(chǎn)生一個(gè)獨(dú)一無(wú)二的“數(shù)字指紋”[5]。如圖2所示。

[string str][獨(dú)一無(wú)二的數(shù)字指紋][MD5加密

不可逆的]

圖2 MD5加密

加密后,一般取得的都是32位的字符或數(shù)字組成。通過(guò)加密后得到的密碼顯示如圖3所示。

圖3 密碼字符串加密

通過(guò)這一過(guò)程,存入數(shù)據(jù)庫(kù)的密碼信息,就是我們看到的那個(gè)繁瑣的字符串。當(dāng)然,在登錄的時(shí)候驗(yàn)證的也是那個(gè)字符串。

2.3 MD5加密實(shí)際應(yīng)用及安全性

MD5加密技術(shù)廣泛用于數(shù)字簽名領(lǐng)域,比如在發(fā)布軟件的時(shí)候,經(jīng)常會(huì)有一個(gè)文件擴(kuò)展名為.MD5的文件,這就是該軟件的數(shù)字簽名,MD5將整個(gè)文件當(dāng)作一個(gè)大文本信息。通過(guò)不可逆的字符串變換算法,產(chǎn)生了這個(gè)惟一的MD5信息摘要。在以后傳播這個(gè)文件的過(guò)程中,只要文件的內(nèi)容發(fā)生了任何形式的改變,其重新計(jì)算的MD5摘要信息就會(huì)不相同,由此,可以判斷文件是否被纂改。

MD5還廣泛用于加密保密信息上,如對(duì)于數(shù)據(jù)庫(kù)中的登錄密碼一般都是經(jīng)過(guò)MD5加密后存放的,當(dāng)?shù)卿洉r(shí),根據(jù)用戶填報(bào)的密碼生成相應(yīng)的MD5值與數(shù)據(jù)庫(kù)中的信息對(duì)比,從而判定登錄的合法性。

理論上任何一種加密算法都有其漏洞,但由于MD5的不可逆,使其具有一定的安全性。而從實(shí)際應(yīng)用的角度講,最大的隱患往往在使用者本身,而非加密技術(shù),在不斷探索更安全有效的加密手段的同時(shí)更需要用戶對(duì)密鑰使用的安全性。

3 流程設(shè)計(jì)

3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)

對(duì)于數(shù)據(jù)庫(kù)的選取,我們選擇的是sql server2000。在數(shù)據(jù)庫(kù)構(gòu)建了一個(gè)表,取名為userinfo,其中的字段是:

id 賬號(hào)(主鍵)

password 密碼

name 姓名

對(duì)其中的password使用MD5加密算法對(duì)其加密。

3.2 服務(wù)器端設(shè)計(jì)

在服務(wù)器端存在著一個(gè)UserinfoDo類和Userinfo類,正因UserinfoDo這個(gè)類提供的各種關(guān)于數(shù)據(jù)庫(kù)的增刪改查方法,才能有如下兩個(gè)功能的實(shí)現(xiàn):一個(gè)是與用戶進(jìn)行信息交流;另一個(gè)是對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。主要是接收從界面?zhèn)鱽?lái)的信息或者返回信息給界面,這之間都會(huì)與數(shù)據(jù)庫(kù)發(fā)生交互。Userinfo是對(duì)應(yīng)數(shù)據(jù)庫(kù)中的userinfo表而創(chuàng)建的一個(gè)類。

3.3 MD5加密設(shè)計(jì)

對(duì)于MD5加密,設(shè)計(jì)時(shí)創(chuàng)建一Md5use類,在里面創(chuàng)建一個(gè)Getmd5str(string str)的方法,參數(shù)即為要加密的密碼字符串,返回值為加密后的密碼,這樣在需要加密的時(shí)候,僅僅只需要調(diào)用一下這個(gè)方法即可。

3.4 客戶端端設(shè)計(jì)

這里我們給出窗口界面整體操作的大致流程,如圖4所示。

[登錄界面][MD5驗(yàn)證登錄](méi)[信息顯示][數(shù)據(jù)庫(kù)][用戶的相關(guān)操作][沒(méi)賬號(hào)][注冊(cè)界面][MD5加密]

圖4 總流程設(shè)計(jì)

3.4.1 登錄設(shè)計(jì)

登錄靠UserinfoLogin這個(gè)窗體來(lái)實(shí)現(xiàn),用戶輸入相應(yīng)的賬號(hào)密碼進(jìn)行登錄,如果密碼不對(duì)會(huì)有相應(yīng)的提示。對(duì)于沒(méi)有賬號(hào)的用戶可以進(jìn)入注冊(cè)窗口,如圖5所示。

[賬號(hào)][密碼][信息顯示][注冊(cè)][MD5加密驗(yàn)證] [成功登錄](méi) [登錄失敗] [(或重新輸入)]

圖5 登錄流程設(shè)計(jì)

當(dāng)?shù)卿浭『?,可以選擇重新登錄。

3.4.2 注冊(cè)設(shè)計(jì)

注冊(cè)靠Region這個(gè)窗體來(lái)實(shí)現(xiàn),使用者可以在此完成注冊(cè),其注冊(cè)的流程如圖6所示。

[賬號(hào)][密碼][名字][MD5加密][注冊(cè)][失敗][成功][賬號(hào)重復(fù)][返回登錄](méi)

圖6 注冊(cè)流程設(shè)計(jì)

在用戶注冊(cè)的時(shí)候,系統(tǒng)會(huì)自動(dòng)判斷賬號(hào)是否重復(fù)。

3.4.3 信息顯示設(shè)計(jì)

在登錄成功之后,信息顯示靠窗體Information來(lái)實(shí)現(xiàn),顯示相應(yīng)的用戶信息。其流程如圖7所示。

[登錄成功][信息顯示界面][密碼修改][賬號(hào)注銷][返回][返回登錄界面]

圖7 信息顯示設(shè)計(jì)

在信息顯示界面,用戶可以對(duì)自己的信息進(jìn)行修改,其對(duì)密碼的修改也仍會(huì)有MD5加密的過(guò)程。

4 相應(yīng)流程實(shí)現(xiàn)

4.1 服務(wù)器端的實(shí)現(xiàn)

服務(wù)器端的Userinfo類中定義了三屬性,分別是private的string _id,string _password,string _name。這是由對(duì)應(yīng)數(shù)據(jù)庫(kù)的表創(chuàng)建的。

在服務(wù)器端的UserinfoDo類中,定義的連接字符為:

private static string con="Data Source=HY-PC;

Initial Catalog=hy; User ID=sa";

在此類中,優(yōu)先聲明了以下幾個(gè)屬性:

private static SqlConnection conn; 表示一個(gè)連接

private static SqlCommand comm; 表示一個(gè)對(duì)象

private static SqlDataReader sdr;

private static UserInfo user;

在這個(gè)類中其相應(yīng)的方法有:

⑴ 構(gòu)造方法

public UserinfoDo()

{ conn=new SqlConnection(con);

conn.Open();

}

我們把創(chuàng)建連接放到其構(gòu)造方法中,是為了在初始化的時(shí)候,自動(dòng)創(chuàng)建連接。

⑵ 按ID查詢

public UserInfo findone(string id) {

string sql=string.Format("select*from userinfo where id={0}",id);

comm=new SqlCommand(sql,conn);

sdr=comm.ExecuteReader();

using(sdr) {

while (sdr.Read())

{ string m_id=(string)sdr["id"];

string m_password=(string)sdr["password"];

string m_name=(string)sdr["name"];

user=new UserInfo(m_id, m_password, m_name);

}

}

return user;

}

后面的代碼量過(guò)大,在此就不一一列舉。

⑶ 添加方法

public void addone(UserInfo user) {

……

}

⑷ 信息修改方法

public void updateone(UserInfo user) {

……

}

⑸ 刪除方法

public void deleteone(string m_id) {

……

}

4.2 MD5加密的實(shí)現(xiàn)

MD5加密是在一個(gè)Md5use類中的Getmd5str(string str)方法中實(shí)現(xiàn)的。其實(shí)現(xiàn)的過(guò)程如下:

public string Getmd5str(string str) {

string laststr=null;

MD5 md5=new MD5CryptoServiceProvider();

byte[] fromdata=System.Text.Encoding.Unicode.GetBytes(str);

byte[] todata=md5.ComputeHash(fromdata);

for (int i=0; i

laststr+=todata[i].ToString("X");

return laststr.Substring(0,31);

}

注意編寫此代碼之前需要先導(dǎo)入包含算法的類:

using System.Security.Cryptography;

4.3 登錄的實(shí)現(xiàn)

圖8為windows窗體的登錄窗口:

圖8 登錄窗口

當(dāng)密碼、賬戶或輸入信息不對(duì)時(shí)會(huì)跳出窗口,如圖9所示。

圖9 密碼錯(cuò)誤提示框

其相應(yīng)的驗(yàn)證即密碼加密的代碼如下:

Md5use md5=new Md5use();

if(textBox1.Text.Trim()=="")

MessageBox.Show("請(qǐng)輸入正確的賬號(hào)");

else {

ud=new UserinfoDo();

try {

user=ud.findone(textBox1.Text);

if (user.Password==md5.Getmd5str(textBox2.Text)

&&user.Id==textBox1.Text)

{

ud=new UserinfoDo();

information infor=new information(this);

this.Hide();

infor.ShowDialog();

}

else

MessageBox.Show("請(qǐng)輸入正確的密碼");

}

catch (Exception)

MessageBox.Show("請(qǐng)仔細(xì)確認(rèn)賬號(hào)密碼");

}

當(dāng)?shù)卿洺晒髸?huì)進(jìn)入信息顯示界面,若失敗會(huì)給出相應(yīng)的提示。這些代碼都寫在登錄按鈕的點(diǎn)擊事件中。

4.4 注冊(cè)的實(shí)現(xiàn)

注冊(cè)界面如圖10所示。

圖10 注冊(cè)窗體

當(dāng)注冊(cè)成功或因ID重復(fù)注冊(cè)而失敗,都會(huì)有相應(yīng)的窗口提示。

代碼的實(shí)現(xiàn)如下:

{ ud=new UserinfoDo();

md5=new Md5use();

if (textBox1.Text.Trim()=="")

MessageBox.Show("請(qǐng)輸入賬號(hào)");

else

{ try

{ ud.addone(new UserInfo(textBox1.Text,

md5.Getmd5str(textBox2.Text), textBox3.Text));

MessageBox.Show("注冊(cè)成功");

}

catch (Exception)

MessageBox.Show("賬號(hào)重復(fù)");

}

}

以上的代碼都寫在界面注冊(cè)按鈕的點(diǎn)擊事件中,其中md5.Getmd5str(textBox2.Text)就是為密碼加密。

4.5 信息顯示的實(shí)現(xiàn)

信息顯示界面,主要是顯示數(shù)據(jù)庫(kù)中的內(nèi)容,如圖11所示。

圖11 信息顯示窗體

從圖7中可以看到一些相應(yīng)的功能按鈕,當(dāng)進(jìn)行信息修改或用戶注銷的時(shí)候,都會(huì)在點(diǎn)擊后自動(dòng)回到登錄界面。相應(yīng)代碼實(shí)現(xiàn)如下:

確認(rèn)修改:{

md5=new Md5use();

uf.ud.updateone(new UserInfo(uf.user.Id,

md5.Getmd5str(textBox1.Text),textBox2.Text));

MessageBox.Show("信息修改成功,重新登錄");

UserinfoLogin login=new UserinfoLogin();

this.Hide();

login.ShowDialog();

}

注銷ID:{

uf.ud.deleteone(uf.user.Id);

UserinfoLogin login=new UserinfoLogin();

this.Hide();

login.ShowDialog();

}

返回登錄:{

UserinfoLogin login=new UserinfoLogin();

this.Hide();

login.ShowDialog();

}

代碼都是寫在相對(duì)應(yīng)按鈕的點(diǎn)擊事件中。

5 結(jié)束語(yǔ)

MD5加密的不可逆性,使它在當(dāng)今加密領(lǐng)域被廣泛應(yīng)用。本文在介紹C#的WindowsForm編程和MD5加密相關(guān)知識(shí)的基礎(chǔ)上,探討了對(duì)MD5加密應(yīng)用的設(shè)計(jì)流程,其核心思想就是對(duì)用戶信息進(jìn)行存儲(chǔ)的MD5加密。通過(guò)多個(gè)Window窗口設(shè)計(jì)的實(shí)現(xiàn),逐步實(shí)現(xiàn)了整個(gè)流程的設(shè)計(jì)。相信MD5加密技術(shù)還會(huì)在以后不斷得到完善,并且有更廣泛的使用。

參考文獻(xiàn):

[1] Andrew Troelsen. C#與.net 4高級(jí)程序設(shè)計(jì)(第五版)[M].人民郵電

出版社,2011:1146-1147

[2] 桑海,李建寶.加密算法MD5的研究與應(yīng)用[J].華南金融電腦,

1999.7.

[3] 施衛(wèi)鋒,周俊,朱利剛.多戶住處系統(tǒng)中數(shù)據(jù)安全性控制機(jī)器及其實(shí)

現(xiàn)[J].微機(jī)發(fā)展,2003.1.

[4] 陳瑋.MD5加密原理及安全性分析[J].電腦知識(shí)與技術(shù),2007.19.

[5] 陳建熊,劉克勝;數(shù)據(jù)加密技術(shù)及其應(yīng)用[J].安徽電子信息職業(yè)技術(shù)

學(xué)院學(xué)報(bào),2004.Z1.

猜你喜歡
窗體控件賬號(hào)
彤彤的聊天賬號(hào)
施詐計(jì)騙走游戲賬號(hào)
派出所工作(2021年4期)2021-05-17 15:19:10
試談Access 2007數(shù)據(jù)庫(kù)在林業(yè)檔案管理中的應(yīng)用
檔案天地(2019年5期)2019-06-12 05:12:02
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
Google Play游戲取消賬號(hào)綁定沒(méi)有Google賬號(hào)也能玩
CHIP新電腦(2016年3期)2016-03-10 14:52:50
基于LayeredWindow的異形窗體局部刷新
中文信息(2014年2期)2014-03-06 23:49:14
巧設(shè)WPS窗體控件讓表格填寫更規(guī)范
就這樣玩會(huì)VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
棄繁從簡(jiǎn),團(tuán)購(gòu)我用360
WinCE.net下圖形用戶界面的開發(fā)
句容市| 绥江县| 正宁县| 城市| 德昌县| 绩溪县| 镇赉县| 中超| 盱眙县| 贵港市| 兴海县| 交口县| 常宁市| 哈密市| 搜索| 视频| 高邑县| 乌鲁木齐县| 江阴市| 通河县| 娄烦县| 侯马市| 怀仁县| 嘉祥县| 冀州市| 沅陵县| 克东县| 芦山县| 阿拉善右旗| 乌什县| 漯河市| 景泰县| 荆州市| 顺平县| 安阳县| 蒲江县| 高陵县| 六枝特区| 盈江县| 来凤县| 双牌县|