C# – 簡單的加解密

有時候需要把文件進行一些保護,就需要來個加解密囉!

.NET裡面有提供各種演算法的類別可以使用,我挑選比較單純(安全性也較低就是)的DES(Data Encryption Standard=數據加密標準)演算法。

主角是System.Security.Cryptography底下的『DESCryptoServiceProvider

使用方式除了MSDN上的之外,也參考了『C# 使用 MD5, DES, RSA 演算法加解密

個人覺得後者比較簡單易懂啦~

string original = "要被加密的字串";
string key = "abcdefgh";
string iv = "12345678";

DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
des.Key = Encoding.ASCII.GetBytes(key);  
des.IV = Encoding.ASCII.GetBytes(iv);  
byte[] s = Encoding.ASCII.GetBytes(original);  
ICryptoTransform desencrypt = des.CreateEncryptor();  
return BitConverter.ToString(desencrypt.TransformFinalBlock(s, 0, s.Length)).Replace("-", string.Empty);  

除了key&iv是一定要8個字(這裡會自動轉成ascii碼),比較重要的就是上面code中特別標明紅色粗體的ASCII。
這個地方是要根據你所使用的編碼決定,簡單來說,有中文之類的,就需要用UTF8或Unicode等等的。

string hexString = "被加密過的字串";
string key = "abcdefgh";
string iv = "12345678";

DESCryptoServiceProvider des = new DESCryptoServiceProvider();   
des.Key = Encoding.ASCII.GetBytes(key);
des.IV = Encoding.ASCII.GetBytes(iv);   
byte[] s = new byte[hexString.Length / 2];   
int j = 0;   
for (int i = 0; i < hexString.Length/2; i++)   
{   
  s[i] = Byte.Parse(hexString[j].ToString() + hexString[j + 1].ToString(), System.Globalization.NumberStyles.HexNumber);   
  j += 2;   
}   
ICryptoTransform desencrypt = des.CreateDecryptor();   
return Encoding.ASCII.GetString(desencrypt.TransformFinalBlock(s, 0, s.Length));

解密的部分就一樣注意編碼要相同才不會出事哪!

延伸參考

資料加密標準(DES,Data Encryption Standard) – Wiki

initialization vector (IV) – Wiki

WEP Cracking
原來WEP這麼不安全阿…幾秒鐘就能解了耶!!

One thought on “C# – 簡單的加解密

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s