2010-12-15 8 views
0

J'ai la méthode de décryptage suivante qui semble bien fonctionner, sauf qu'elle ne renvoie que 16 octets au lieu de 32, si je l'ai regardé trop longtemps et ne peux pas comprendre ce que j'ai fait de mal. J'espère qu'un ensemble différent d'yeux aidera. Merci.Le déchiffrement renvoie 16 octets au lieu de 32, pourquoi?

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) 

Répondre

0

La taille de votre bloc est de 128 bits. Si vous décodez seulement un bloc, vous obtiendrez 16 octets.

+0

Salut Yann, merci pour l'entrée. Je ne peux pas définir BlockSize plus grand il ne le permet pas alors comment devrait-il aller décoder plus d'un bloc? –

+0

@WillTartak: Cela dépend complètement du mode de chiffrement utilisé. BCE? CBC? CTR? XTR? CFB? Qu'est-ce que vous essayez d'accomplir qu'une API crypto de plus haut niveau (et bien conçue) ne fournit pas? –

Questions connexes