none
Rijndael演算法(AES)中,Key的長度是否可設定?? RRS feed

  • 問題

  • 利用RijndaelManaged.GenerateKey所產生的Key長度為256 Bits

    我想問的是,有沒有什麼方法可以選擇Key的長度(128 or 192 or 256)
    2008年4月20日 上午 01:59

解答

所有回覆

  • 可以,加密範例如下:

    string inputString = "測試文字";
    string password = "p@ssw0rd";
     
    byte[] binputString = Encoding.Default.GetBytes(inputString);
    byte[] saltBytes = Encoding.Default.GetBytes("salt string");
     
    RijndaelManaged aes = new RijndaelManaged();
    Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, saltBytes);
     
    aes.KeySize = 256;
    aes.Key = key.GetBytes(32);
     
    aes.BlockSize = 128;
    aes.IV = key.GetBytes(16);
     
    ICryptoTransform encryptor = aes.CreateEncryptor();
    MemoryStream memoryStream = new MemoryStream();
    CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
     
    cryptoStream.Write(binputString, 0, binputString.Length);
    cryptoStream.FlushFinalBlock();
    cryptoStream.Close();
     
    byte[] encryptBytes = memoryStream.ToArray();
    string encryptedData = Convert.ToBase64String(encryptBytes);
     
    MessageBox.Show(encryptedData);

    請試著自己寫寫看如何解密,並參考 Advanced Encryption Standard

    2008年4月20日 上午 04:30
  • 謝謝~~
    我會試試看的~~~
    2008年4月20日 上午 10:39
  • 真是對不起,我用的程式語言是.Net 2005
          使用Rfc2898DeriveBytes 類別,會出現型別'Rfc2898DeriveBytes' 未定義
          (有Imports System.Security.Cryptography)

    另外
    面第一、二行的用途是什麼?   第三行不了解用法...  
    byte[] binputString = Encoding.Default.GetBytes(inputString);
    byte[] saltBytes = Encoding.Default.GetBytes("salt string");
    Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, saltBytes)

    謝謝~~





    2008年4月20日 下午 12:09
  • 那請你先參考官方文件: Rfc2898DeriveBytes


    2008年4月20日 下午 12:30