2013-02-18

C# AES-256-CBC 加解密

使用到的名稱空間 :
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;

程式碼如下,將字串 "text to be encrypted" 加密後解密看結果是否相同 :
RijndaelManaged rijalg = new RijndaelManaged();
 
//-----------------
//設定 cipher 格式 AES-256-CBC
rijalg.BlockSize = 128;
rijalg.KeySize = 256;
rijalg.FeedbackSize = 128;
rijalg.Padding = PaddingMode.PKCS7;
rijalg.Mode = CipherMode.CBC;
 
rijalg.Key = (new SHA256Managed()).ComputeHash(Encoding.ASCII.GetBytes("IHazSekretKey"));
rijalg.IV = System.Text.Encoding.ASCII.GetBytes("1234567890123456");
 
//-----------------
//加密
ICryptoTransform encryptor =rijalg.CreateEncryptor(rijalg.Key, rijalg.IV);
 
byte[] encrypted;
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
    {
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
        {
            //Write all data to the stream.
            swEncrypt.Write("text to be encrypted");
        }
        encrypted = msEncrypt.ToArray();
    }
}
 
//-----------------
//加密後的 base64 字串 :
//eiLbdhFSFrDqvUJmjbUgwD8REjBRoRWWwHHImmMLNZA=
System.Console.WriteLine(Convert.ToBase64String(encrypted));
 
//-----------------
//解密
ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);
 
string plaintext;
// Create the streams used for decryption. 
using (MemoryStream msDecrypt = new MemoryStream(encrypted))
{
    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
    {
        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
        {
 
            // Read the decrypted bytes from the decrypting stream 
            // and place them in a string.
            plaintext = srDecrypt.ReadToEnd();
        }
    }
}
 
//-----------------
//最後印出字串 "text to be encrypted"
System.Console.WriteLine(plaintext);

5 則留言 :

  1. 請問是否有 供 ASP語言的範例可供在下參考? 謝謝.

    回覆刪除
    回覆
    1. 您好,
      請問是 ASP.net 嗎 ? , 範例使用的都是 .net framework 提供的方法, 理論上 在 ASP.net 上應該是可以直接拿來用喔

      刪除
  2. 您好, 非常感激您的回覆, 在下渴望取得的是在 Classic ASP 運用的語法, 因在http://www.frez.co.uk 取得的 rijndaelvb.zip 裡的 rijndaeltest.asp 內容 並無法設定 如 rijalg.BlockSize = 128; rijalg.KeySize = 256; rijalg.FeedbackSize = 128; rijalg.Padding = PaddingMode.PKCS7; rijalg.Mode = CipherMode.CBC; 參數, 以致在下無法依據自身的需求更改, 在此懇請您可撥冗幫助在下.

    回覆刪除
    回覆
    1. 您好, 不知這個連結裡提供的訊息對您有沒有幫助呢 ?
      http://blog.ryeol.com/30

      刪除
    2. 非常感謝您熱心的提供資訊, 該內容使用的方式係需要主機支援特定元件使用, 但在下是租用虛擬主機, 因此無法使用需要註冊元件的方式, 在下渴望取得的是 純 Classic ASP 的語法, 以上請恕在下冒昧請教. 感激不盡.

      刪除