2010-12-15 57 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设置得更大,它不允许它,所以它应该如何解码超过一个块? – 2010-12-15 21:23:07

+0

@WillTartak:完全取决于正在使用的密码模式。欧洲央行? CBC? CTR? XTR? CFB?你想要完成什么,一个更高级别(和精心设计)的加密API不提供? – 2010-12-15 22:13:06

相关问题