搜尋此網誌

2016年4月3日 星期日

利用.Net實作AES加密演算法

AES就是進階版的DES
前篇有說DES目前已經可以被破解,所以不安全
因此美國NIST(美國國家標準與技術研究院)於2002所加以改造所產生出來的
進階加密標準英語:Advanced Encryption Standard縮寫AES
AES採用的是非對稱型的加解密方式
只需要一把安全鑰匙,但長度需32位元
並且無法逆向反組譯
目前銀行或SSL加密都是以這個標準加以改良發展的
接下來就利用.Net實作AES加密演算法

一樣的先設計個簡單的UI介面
並且假定密碼如下(32位元):
public string strKey = "MyNameIsChihweiKuanBirth19810313";

 接下來將資料放入按下加密

  1. private void btnEncrypt_Click(object sender, EventArgs e)  
  2. {  
  3.     txtResult.Text = Encrypt_AES(txtSource.Text, strKey);  
  4. }  

  1. public String Encrypt_AES(String str, string key)  
  2. {  
  3.     Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);  
  4.     Byte[] toEncryptArray = System.Text.UTF8Encoding.UTF8.GetBytes(str);  
  5.   
  6.     System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();  
  7.     rDel.Key = keyArray;  
  8.     rDel.Mode = System.Security.Cryptography.CipherMode.ECB;  
  9.     rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;  
  10.   
  11.     System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateEncryptor();  
  12.     Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);  
  13.   
  14.     return Convert.ToBase64String(resultArray, 0, resultArray.Length);  
  15. }  

接下來利用加密後的字串再進行解密,驗證看看
  1. private void btnDecrypt_Click(object sender, EventArgs e)  
  2. {  
  3.     txtResult.Text = Decrypt_AES(txtSource.Text, strKey);  
  4. }  

  1. public String Decrypt_AES(String str, string key)  
  2. {  
  3.     Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);  
  4.     Byte[] toEncryptArray = Convert.FromBase64String(str);  
  5.   
  6.     System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();  
  7.     rDel.Key = keyArray;  
  8.     rDel.Mode = System.Security.Cryptography.CipherMode.ECB;  
  9.     rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;  
  10.   
  11.     System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateDecryptor();  
  12.     Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);  
  13.   
  14.     return System.Text.UTF8Encoding.UTF8.GetString(resultArray);  
  15. }  

有興趣的人也可以實作看看喔

沒有留言:

張貼留言