2010-12-15 2 views
0

У меня есть следующий метод дешифрования, который, кажется, работает нормально, за исключением того, что он возвращает только 16 байт вместо 32, я должен слишком долго смотреть на него и не могу понять, что я сделал неправильно. Я надеюсь, что другой набор глаз поможет. Благодарю.Расшифровка возвращает 16 байт вместо 32, почему?

private string Decrypt(string dataToDecrypt, string password, string salt) 
    { 
     //Generate a Key based on a Password, Salt and HMACSHA1 pseudo-random number generator 
     Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt)); 

     //Create AES algorithm with 256 bit key and 128-bit block size 
     using (var aes = new AesManaged()) 
     { 
      // These two values are hard coded in Silverlight 
      //aes.Mode = CipherMode.CBC; 
      //aes.Padding = PaddingMode.PKCS7; 
      aes.Key = rfc2898.GetBytes(aes.KeySize/8); 
      aes.IV = rfc2898.GetBytes(aes.BlockSize/8); 

      //Create Memory and Crypto Streams 
      using (var memoryStream = new MemoryStream()) 
      { 
       using (var cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write)) 
       { 

        //Decrypt Data 
        byte[] data = Convert.FromBase64String(dataToDecrypt); 
        cryptoStream.Write(data, 0, data.Length); 
        // cryptoStream.FlushFinalBlock(); 

        //Return Decrypted String 
        byte[] decryptBytes = memoryStream.ToArray(); 
        string decrypted = Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length); 
        return decrypted; 

       }  // using (cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write)) 

      }  // using (memoryStream = new MemoryStream()) 

     }  // using (aes = new AesManaged()) 

    }  // string Decrypt(string dataToDecrypt, string password, string salt) 

ответ

0

Размер вашего блока составляет 128 бит. Если вы только декодируете один блок, вы получите 16 байт.

+0

Привет, Янн, спасибо за ввод. Я не могу установить BlockSize больше, чем он этого не позволяет, так как следует использовать декодирование более одного блока? –

+0

@WillTartak: Это полностью зависит от используемого режима шифрования. ЕЦБ? CBC? CTR? XTR? CFB? Что вы пытаетесь сделать, что более высокий уровень (и хорошо разработанный) криптографический API не предоставляет? –

Смежные вопросы