馮 菁
(淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系, 安徽 淮北 235000)
ASP.NET中DES算法加密與解密的應(yīng)用
馮 菁
(淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系, 安徽 淮北 235000)
以ASP.NET頁面數(shù)據(jù)安全為基礎(chǔ),通過最常用的DES加密,編寫可以復(fù)用的加密解密函數(shù)。與其他技術(shù)相比較,.NET簡單易實(shí)現(xiàn),為數(shù)據(jù)加密提供了方便,.NET Framework有效封裝了常用加密算法。通過調(diào)用自定義函數(shù)實(shí)現(xiàn)對(duì)Web頁面指定數(shù)據(jù)信息的加密與解密,方法簡單,運(yùn)算速度較快,適應(yīng)于大多數(shù)Web站點(diǎn)中的數(shù)據(jù)信息安全,最后提出可替換加密強(qiáng)度更大的AES加密技術(shù)以及其他加密方法。
ASP.NET; DES算法; 數(shù)據(jù)加密
ASP.NET開發(fā)的Web應(yīng)用程序集頁面、控件、代碼模塊和服務(wù)組成[1],支持多種語言,且技術(shù)成熟。集成開發(fā)環(huán)境Visual Studio.NET界面友好,ASP.NET已成為眾多動(dòng)態(tài)網(wǎng)站編程人員的首選[2]。在開發(fā)平臺(tái)中,Java雖開放源碼多,但大多是英文資料,內(nèi)容非常專業(yè),不易入門。
利用ASP.NET進(jìn)行Web開發(fā),能夠提供一系列有效措施保障數(shù)據(jù)安全。采用Session對(duì)象與Cookie對(duì)象來實(shí)現(xiàn)用戶數(shù)據(jù)安全以及信息跨頁面安全;利用后臺(tái)數(shù)據(jù)庫系統(tǒng)自帶的安全機(jī)制,可以保證數(shù)據(jù)的安全性、一致性等。本文將討論用.NET自帶加密算法類提供的加密服務(wù)來實(shí)現(xiàn)數(shù)據(jù)加密,在類文件中編寫加密與解密函數(shù),并在所需的頁面代碼中調(diào)用這些函數(shù),保證頁面指定數(shù)據(jù)與數(shù)據(jù)表里信息的保密與安全。
1.1 數(shù)據(jù)加密
數(shù)據(jù)加密是防止數(shù)據(jù)被竊取篡改的有效手段,通過加密防止數(shù)據(jù)被更改,保證數(shù)據(jù)的完整性,還可以通過加密來實(shí)現(xiàn)身份驗(yàn)證,確認(rèn)數(shù)據(jù)來自特定的用戶[1]。
“加密”就是通過一些公式和法則,把明文(plaintext)加密而產(chǎn)生的經(jīng)過編碼的數(shù)據(jù)(也稱為密文,ciphertext)。解密是將密文還原為明文的過程,是加密的逆處理。
1.2 常用加密技術(shù)簡介
加密技術(shù)應(yīng)用最廣泛的主要有兩類:對(duì)稱密鑰算法和非對(duì)稱密鑰算法。
對(duì)稱密鑰算法的發(fā)送者和接收者雙方使用相同的密鑰。對(duì)稱加密算法的特點(diǎn)是算法公開、高效、快速、簡單。主要的加密算法有:DES、RC2、RC5、3DES(Triple DES)和AES(Rijndael)系列加密算法[3]。
非對(duì)稱密鑰加密使用一組公共/私人密鑰,加密時(shí)使用公鑰,解密時(shí)使用私鑰。用戶可用公開密鑰加密數(shù)據(jù),但只能用相應(yīng)的私鑰進(jìn)行解密,如RSA算法等。
1.3 .NET提供的加密技術(shù)
ASP.NET中有多種加密算法,如DES、RSA、MD5、3DES、AES(Rijndael)等。這些有關(guān)加密類都在System.Web.Security[1]和System.Security.Cryptography命名空間,這個(gè)命名空間包含加密與簽名相關(guān)的類,安全的數(shù)據(jù)編碼和解碼,以及許多其他算法操作,如HASH、隨機(jī)數(shù)字等算法。列出幾種.NET Framework提供的常用加密類:
DES:DESCryptoServiceProvider;
Rijndael(AES):RijndaelManaged;
3DES:TripleDESCryptoServiceProvider;
MD5:MD5CryptoServiceProvider;
RSA:RSACryptoServiceProvider。
2.1 Java中的DES加密與解密
作為微軟開發(fā)平臺(tái).NET的競爭對(duì)手Java EE是企業(yè)級(jí)開發(fā),也作為Web開發(fā)的Java框架,同樣提供了豐富的類庫及接口,方便用戶開發(fā)操作。
Java的javax.crypto包提供了有關(guān)密碼、密鑰使用的接口與類。javax.crypto.Cipher類提供加密和解密功能,調(diào)用它的靜態(tài)方法getInstance,可以返回一個(gè)Cipher對(duì)象,格式為:Cipher.getInstance(“加密算法/工作模式/填充方案”),也可只有加密算法。默選ECB模式,填充PKCS5Padding作為默認(rèn)的填充方案。
加密過程: Cipher DEScipher1=Cipher.getInstance("DES/ECB/PKCS5Padding");
DEScipher1.init(Cipher.ENCRYPT_MODE, key, iv);
解密過程: Cipher DEScipher1=Cipher.getInstance("DES/ECB/PKCS5Padding");
DEScipher1.init(Cipher.DECRYPT_MODE, key, iv)。
JavaME版主要用于開發(fā)消費(fèi)電子設(shè)備,如PDA、移動(dòng)電話等。因?yàn)镴ava開源項(xiàng)目很多,Java的開發(fā)工具Eclipse可安裝adt插件,與Android sdk連接,在Eclipse中使用Android模擬器進(jìn)行程序調(diào)試等,可用于開發(fā)手機(jī)APP。
2.2 Android Studio開發(fā)中的加密與解密
Android Studio(AS)是谷歌推出的新的Android開發(fā)環(huán)境,支持Java與C++語言。
基于Java語言的Android SDK中有一個(gè)類Cipher,它構(gòu)造一個(gè)用于加密的實(shí)例化對(duì)象cipher1,具體操作為:
Cipher cipher1=Cipher.getInstance("DES/CBC/PKCS5Padding")。
括號(hào)中的3個(gè)參數(shù)需要傳入[4],參照2.1所述。DES算法廣泛應(yīng)用于手機(jī)APP、機(jī)頂盒、POS機(jī)、銀行自助終端、高速公路收費(fèi)、磁卡及智能卡(IC卡)等領(lǐng)域,實(shí)現(xiàn)核心數(shù)據(jù)的保密[5]。若是嵌入式開發(fā),首選AS或是Eclipse。
DES算法速度較快,適用于加密大量數(shù)據(jù)的場合。DES使用的密鑰key為8字節(jié),初始向量IV是8字節(jié)。
標(biāo)準(zhǔn)DES對(duì)稱加密應(yīng)用的開發(fā)環(huán)境為VS.net,C#語言。在ASP.NET頁面對(duì)傳輸數(shù)據(jù)和數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行加密解密,實(shí)現(xiàn)數(shù)據(jù)安全。類DESCryptoServiceProvider加密方法為CreateEncryptor(),解密方法為CreateDecryptor()。使用中不需要理解復(fù)雜的密碼學(xué)原理,直接運(yùn)用即可。
3.1 設(shè)計(jì)加密函數(shù)
在網(wǎng)站App_Code文件夾下添加類文件UserData.cs,在這個(gè)類中自定義加密與解密函數(shù)。
需要引入命名空間using System.Security.Cryptography。
加密過程:public string EncryptDes(string EncryptStr)
{ string strkey="flower12";
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
……
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
……}
此函數(shù)對(duì)字符串進(jìn)行加密,字符串變量為strkey,賦值“flower12”,提供相同的key與IV,也可取不同的值。
3.2 設(shè)計(jì)解密函數(shù)
查詢使用數(shù)據(jù)時(shí)需要解密。解密函數(shù)DecryptDes()部分代碼:
DESCryptoServiceProvider des=new DESCryptoServiceProvider();
des.Key=ASCIIEncoding.ASCII.GetBytes(strkey);
……
CryptoStream cs=new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
加密與解密函數(shù)包含在類文件UserData中,先實(shí)例化,然后調(diào)用已定義的函數(shù)。代碼如下:
UserDatamyud=new UserData();//實(shí)例化
4.1 加密ASP.NET頁面表單輸入?yún)^(qū)
常用的網(wǎng)頁上有提交信息表單,若上傳服務(wù)器的內(nèi)容涉及隱私,需要對(duì)字符串進(jìn)行加密;用戶登錄表單中,對(duì)密碼框里數(shù)據(jù)進(jìn)行加密處理;在登錄驗(yàn)證時(shí),用戶輸入的密碼通過DES加密后和數(shù)據(jù)庫中的密碼進(jìn)行比較,如果一致則實(shí)現(xiàn)用戶登錄,登錄界面如圖1所示。
圖1 登錄界面
對(duì)密碼框字符串加密:myud.EncryptDes(PWD.Text),加密指定字符串,即myud.EncryptDes(str)。
4.2 加密數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)
把加密后的密文數(shù)據(jù)寫入adminuser表內(nèi),例如密碼字段,可插入如下記錄:
objcmd.Parameters.Add("@密碼",OleDbType.Char).Value=EncryptDes(password);
objcmd.CommandText="insert into adminuser(用戶名,密碼) values(?,?)";
圖2中示例兩條記錄,相同的密碼值,第一條是密文保存,第二條是原文。
圖2 數(shù)據(jù)表內(nèi)容
調(diào)用解密函數(shù),獲得原文字符串:myud.DecryptDes(str);//解密。
圖3是對(duì)指定字符串的加密與解密,結(jié)果放入文本框中。
想要滿足更加安全的信息保密,可以選擇混合加密的方式,如DES結(jié)合RSA等;或選用其他方式對(duì)字符串加密解密,例如三重?cái)?shù)據(jù)加密算法3DES(TripleDES)[6],其加密封裝類TripleDESCryptoServiceProvider,使用與DESCryptoServiceProvider相似,3DES則使用24字節(jié)的key,位數(shù)更多,加密可靠性更高,初始向量IV也是8字節(jié)。
圖3 加密解密字符串
5.1 ASP.NET頁面安全
本文只討論一般企事業(yè)單位網(wǎng)站,為了保證一些數(shù)據(jù)的安全,需要進(jìn)行加密的內(nèi)容有客戶端與Web服務(wù)器之間數(shù)據(jù)傳遞、用戶識(shí)別、文件保密、數(shù)據(jù)庫安全等問題。選擇DES加密算法快捷、高效、無延遲,適用于普通網(wǎng)站安全保密。安全要求更高的網(wǎng)站或頁面可以使用3DES、RSA等更復(fù)雜有效的加密方式。ASP.NET應(yīng)用程序的安全受程序中的相關(guān)內(nèi)容制約,如數(shù)據(jù)庫連接、與Web服務(wù)器交互的表單、用戶驗(yàn)證等,這也是ASP.NET頁面安全的主要內(nèi)容。
通過簡單的DES數(shù)據(jù)加密,實(shí)現(xiàn)了表單傳輸數(shù)據(jù)加密,對(duì)數(shù)據(jù)庫中部分字段屬性值存儲(chǔ)的重要數(shù)據(jù)及隱私信息可以進(jìn)行加密處理,需要原文數(shù)據(jù)時(shí)可以用相應(yīng)的解密函數(shù)進(jìn)行解密,實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的安全。
5.2 .NET其他數(shù)據(jù)安全
ASP.NET安全設(shè)置有多種方式:(1)ASP.NET的安全認(rèn)證,有“Windows/Form”等驗(yàn)證模式;(2)使用Login登錄控件里封裝的Membership類驗(yàn)證用戶并管理用戶;(3)在Web.config保存加密的數(shù)據(jù)庫連接字符串;(4)同一網(wǎng)站多個(gè)網(wǎng)頁之間的數(shù)據(jù)可以用session對(duì)象來控件訪問。
對(duì)于表單輸入?yún)^(qū)的數(shù)據(jù),數(shù)據(jù)庫中字段數(shù)據(jù)的加密過程,只能在網(wǎng)頁中用代碼進(jìn)行加密。
DES數(shù)據(jù)加密標(biāo)準(zhǔn)將被新型加密標(biāo)準(zhǔn)AES(Rijndael)取代[7],AES(Rijndael)、RSA等算法的應(yīng)用將越來越廣泛。NET對(duì)加密和解密算法的有效封裝,讓程序開發(fā)人員的開發(fā)工作變得簡單、高效。隨著ASP.NET和Web Service技術(shù)在各個(gè)領(lǐng)域的廣泛應(yīng)用,其他各類加密強(qiáng)度高、破解更難的加密算法,如3DES,RC5,MD5等應(yīng)用將越來越廣泛。
任何一種安全的技術(shù)來保障數(shù)據(jù)的安全,都具有相對(duì)性,再復(fù)雜有效的加密也有可能被攻擊、破解,只有增強(qiáng)安全防范意識(shí),才能夠保證數(shù)據(jù)信息的安全。
[1] 劉友生.基于構(gòu)件的ASP.NET(C#)網(wǎng)站開發(fā)教程[M].北京:化學(xué)工業(yè)出版社,2012.
[2] 李萍,王得燕,楊文珺.ASP.NET(C#)動(dòng)態(tài)網(wǎng)站開發(fā)案例教程[M].北京:機(jī)械工業(yè)出版社,2011.
[3] 黃華.ASP.NET中加密和解密的實(shí)現(xiàn)方法[J].淮陰工學(xué)院學(xué)報(bào),2005,14(1):41-43.
[4] 孫語澤,遲嘉,胡亮,等.一種基于DES加密算法的Android平臺(tái)與服務(wù)器通信加密的實(shí)現(xiàn)[J].東北師大學(xué)報(bào):自然科學(xué)版,2015,47(3):78-82.
[5] 漆世錢.基于VC++的DES加密算法實(shí)現(xiàn)[J].自動(dòng)化技術(shù)與應(yīng)用,2014,33(12):25-27.
[6] 呂攀,吳海濤.兩種加密技術(shù)共同構(gòu)建安全的ASP.NET數(shù)據(jù)訪問[J].計(jì)算機(jī)時(shí)代,2005(5):7-8.
[7] 羅光明.基于AES和RSA的網(wǎng)絡(luò)數(shù)據(jù)加密方案[J].現(xiàn)代電子技術(shù),2015,38(9):87-89.
[責(zé)任編輯:李 莉]
Application of data encryption and deciphering based on DES algorithm in the ASP.NET
FENG Jing
(Department of Computer Science and Technology, Huaibei Vocational & Technical College,Huaibei 235000, China)
Data encryption is the critical process to ensure the security of the Internet. ASP.NET 2.0 and Visual Studio 2005 made everything easier by introducing the Web site of development, and it is now widely used system of development and application. The general encryption arithmetic are encapsulated into packet in .NET Framework. The program base on DES algorithm is easy and simple to implement that generates a small amount of calculation and rapid information processing. By writing user defined function of data encryption and data decryption which can reuse, calling these functions to implement the encryption protect of Web page data and ensure the information security. At last,the paper proposed AES algorithm with greater encryption technology and other applications.
ASP.NET; DES algorithm; data encryption
2016-09-10
2016-10-20
安徽省高校自然科學(xué)研究項(xiàng)目(KJ2015A315)
馮菁(1974—),女,上海市人,淮北職業(yè)技術(shù)學(xué)院高級(jí)工程師,碩士,主要研究方向?yàn)閿?shù)據(jù)挖掘。
1673-2944(2017)02-0064-05
TP311
A