AES就是進階版的DES
前篇有說DES目前已經可以被破解,所以不安全
因此美國NIST(美國國家標準與技術研究院)於2002所加以改造所產生出來的
AES採用的是非對稱型的加解密方式
只需要一把安全鑰匙,但長度需32位元
並且無法逆向反組譯
目前銀行或SSL加密都是以這個標準加以改良發展的
接下來就利用.Net實作AES加密演算法
一樣的先設計個簡單的UI介面
並且假定密碼如下(32位元):public string strKey = "MyNameIsChihweiKuanBirth19810313";
接下來將資料放入按下加密
- private void btnEncrypt_Click(object sender, EventArgs e)
- {
- txtResult.Text = Encrypt_AES(txtSource.Text, strKey);
- }
- public String Encrypt_AES(String str, string key)
- {
- Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);
- Byte[] toEncryptArray = System.Text.UTF8Encoding.UTF8.GetBytes(str);
- System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();
- rDel.Key = keyArray;
- rDel.Mode = System.Security.Cryptography.CipherMode.ECB;
- rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
- System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateEncryptor();
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return Convert.ToBase64String(resultArray, 0, resultArray.Length);
- }
接下來利用加密後的字串再進行解密,驗證看看
- private void btnDecrypt_Click(object sender, EventArgs e)
- {
- txtResult.Text = Decrypt_AES(txtSource.Text, strKey);
- }
- public String Decrypt_AES(String str, string key)
- {
- Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);
- Byte[] toEncryptArray = Convert.FromBase64String(str);
- System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();
- rDel.Key = keyArray;
- rDel.Mode = System.Security.Cryptography.CipherMode.ECB;
- rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
- System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateDecryptor();
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return System.Text.UTF8Encoding.UTF8.GetString(resultArray);
- }
有興趣的人也可以實作看看喔
沒有留言:
張貼留言