2010-12-15 9 views
0

私はそれがあまりにも長くそれを見つめて、私が間違って何をしたのか分からないはずですが、32バイトの代わりに16バイトを返す以外は、正常に動作するように見える次の復号化方法があります。私は目の別のセットが助けることを望んでいる。ありがとう。復号化では32バイトではなく16バイトが返されますが、なぜですか?

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ビットです。 1つのブロックだけをデコードする場合、16バイトが得られます。

+0

こんにちはYann、入力いただきありがとうございます。 BlockSizeをそれ以上の大きさに設定することはできません。なぜなら、複数のブロックをデコードするにはどうしたらいいですか? –

+0

@WillTartak:これは、使用されている暗号モードに完全に依存します。 ECB? CBC? CTR? XTR? CFB?より高いレベルの(そしてうまく設計された)暗号APIが提供していないことを達成しようとしていますか? –

関連する問題