[摘 要] .NET中有多種可用的加密和解密算法。支持對稱密鑰算法和非對稱密鑰算法,支持對常規算法的缺省實現,用戶也可以自定義加密和解密算法。本文重點討論如何運用.NET進行加密和解密。
[關鍵詞] .NET 加密 解密
一、引言
電子商務在當今世界已經被廣泛應用,其在技術方面的核心問題是信息的保密性、完整性和不可否認性。加密技術是電子商務采取的主要的安全措施。.NET中有多種可用的加密和解密算法。支持對稱密鑰算法和非對稱密鑰算法,支持對常規算法的缺省實現,用戶也可以自定義加密和解密算法。本文重點討論如何運用.NET進行加密和解密。
二、加密和解密的算法
加密和解密的算法分為對稱算法和不對稱算法。對稱算法在加密和解密數據時使用相同的密鑰和初始化矢量,典型的有DES、TripleDES和Rijndael算法,主要用于本地文檔或數據的加密。不對稱算法有兩個不同的密鑰,分別是公共密鑰和私有密鑰,公共密鑰在網絡中傳遞,用于加密數據,而私有密鑰用于解密數據。不對稱算法主要有RSA、DSA等,主要用于網絡數據的加密。
三、加密和解密本地文檔
采用對稱密鑰算法,首先獲取服務提供者的特定實例,創建一個用于加密的新的隨機密鑰和初始化向量IV。密鑰的大小取決于用來加密的特定提供程序。IV將幫助算法生成最終加密字符串的數據塊。IV用于開始第一個塊的加密。如果不提供IV,那么只要密鑰相同,在字符串之間傳遞的通用數據將保持同一種模式。因此,需要使用IV作為加密數據的“隨機”組件。通過這種方式,只要使用的IV不同,即使密鑰相同,同一個數據也會被加密成完全不同的值。下面以DES加密算法演示加密和解密的過程:
1.數據加密
public byte[] Encrypt(byte[] bytesData,outbyte[] bytesKey,outbyte[] bytesIV){
MemoryStream Data1 = new MemoryStream();
SymmetricAlgorithm sa=new DESCryptoServiceProvider();
ICryptoTransform transform =sa.CreateEncryptor();
CryptoStream encStream =newCryptoStream(Data1,transform,CryptoStreamMode.Write);
encStream.Write(bytesData, 0, bytesData.Length);
encStream.FlushFinalBlock();
encStream.Close();
bytesKey = sa.Key;
bytesIV = sa.IV;
return Data1.ToArray();}
2.數據解密
public byte[] Decrypt(byte[] bytesData, byte[] bytesKey,byte[] bytesIV){
MemoryStream Data2 = new MemoryStream();
SymmetricAlgorithm sa=new DESCryptoServiceProvider();
ICryptoTransform transform = sa.CreateDecryptor(bytesKey,bytesIV);
CryptoStream decStream =newCryptoStream(Data2,transform,CryptoStreamMode.Write);
decStream.Write(bytesData,0,bytesData.Length);
decStream.FlushFinalBlock();
decStream.Close();
return Data2.ToArray();}
四、網絡數據加密和解密
非對稱算法就是一種解決方案。不對稱加密算法(也稱作公鑰算法) 要求發送方和接收方共同維護一對相關的密鑰:私鑰和公鑰。兩個密鑰對實體來說都是惟一的。公鑰可由任何人使用; 該密鑰用于對發送給接收方的數據進行加密。私鑰必須由接收方保持私有;該密鑰用于對使用接收方的公鑰編碼的消息進行解密。這類算法使用的兩個密鑰有如下關系:使用公共密鑰加密的信息只能被相應的私有密鑰解密。
不對稱算法比對稱算法計算的花費多、速度慢。因此在線對話中使用不對稱算法加密對稱密鑰。實際上安全接口層(SSL)建立服務器和瀏覽器之間的安全對話使用的就是這種工作方式:
public byte[] RSAEncrypt(byte[] DToe,RSAKeyInfo,bool Tof){
RSACryptoServiceProvider RSA = new RSACryptoService-Provider();
RSA.ImportParameters(RSAKeyInfo);
return RSA.Encrypt(DToe, Tof);}
public byte[] RSADecrypt(byte[] DTod, RSAKeyInfo,bool Tof) {
RSACryptoServiceProvider RSA = new RSACryptoService-Provider();
RSA.ImportParameters(RSAKeyInfo);
return RSA.Decrypt(DTod, Tof);}
static string TestRSA(string src){
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dToe = ByteConverter.GetBytes(src);
byte[] eData,dData;
RSACryptoServiceProvider RSA = new RSACryptoService-Provider();
eData = RSAEncrypt(dToe,RSA.ExportParameters(1),1);
dData = RSADecrypt(eData,RSA.ExportParameters(true), 1);
return ByteConverter.GetString(dData);}
五、結論
在實際用中,電子商務的安全加密系統普遍采用對稱加密體制和非對稱加密體制相結合的混合加密體制:用對稱密碼算法來加密或解密大量的數據,而用非對稱密碼算法來加密關鍵性的、核心的機密數據(如會話密鑰)。這樣既發揮了對稱密碼算法的高速、簡便性又充分利用了非對稱密碼體制密鑰管理的方便、安全性,較好地解決了運算速度問題和密鑰分配管理問題。
參考文獻:
[1]祁 明:電子商務安全與保密[M].北京:高等教育出版社,2001,(7)
[2]邱新建:信息加密技術概論[J].石家莊職業技術學院學報,2004,12(6)
[3]楊波等:基于Rabin加密算法的密鑰托管體制[J].西安電子科技大學學報,1999