title: Decrypt AES256 encrypted string with VB.net
body: <p>I want to decrypt in VB.net strings encrypted in PHP via openssl_encrypt function:</p>
  
  <pre><code>$encrypted_string = openssl_encrypt(
      $string,
      'AES256',
      'secret_password',
      0,
      'initialization_vector'
  );
  </code></pre>
  
  <p>I tried with <a href="https://stackoverflow.com/questions/16420173/standard-library-for-aes-encryption-for-vb-net">this class</a>:</p>
  
  <pre><code>Public Class Aes256Encrypter
      Public Function Encrypt(ByVal plainText As String, ByVal secretKey As String) As Byte()
          Dim encryptedPassword As Byte()
          Using outputStream As MemoryStream = New MemoryStream()
              Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
              Using cryptoStream As CryptoStream = New CryptoStream(outputStream, algorithm.CreateEncryptor(), CryptoStreamMode.Write)
                  Dim inputBuffer() As Byte = Encoding.Unicode.GetBytes(plainText)
                  cryptoStream.Write(inputBuffer, 0, inputBuffer.Length)
                  cryptoStream.FlushFinalBlock()
                  encryptedPassword = outputStream.ToArray()
              End Using
          End Using
          Return encryptedPassword
      End Function
  
      Public Function Decrypt(ByVal encryptedBytes As Byte(), ByVal secretKey As String) As String
          Dim plainText As String = Nothing
          Using inputStream As MemoryStream = New MemoryStream(encryptedBytes)
              Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
              Using cryptoStream As CryptoStream = New    CryptoStream(inputStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read)
                  Dim outputBuffer(0 To CType(inputStream.Length - 1, Integer)) As Byte
                  Dim readBytes As Integer = cryptoStream.Read(outputBuffer, 0, CType(inputStream.Length, Integer))
                  plainText = Encoding.Unicode.GetString(outputBuffer, 0, readBytes)
              End Using
          End Using
          Return plainText
      End Function
  
      Private Function getAlgorithm(ByVal secretKey As String) As RijndaelManaged
          Const salt As String = "put your salt here"
          Const keySize As Integer = 256
  
          Dim keyBuilder As Rfc2898DeriveBytes = New Rfc2898DeriveBytes(secretKey, Encoding.Unicode.GetBytes(salt))
          Dim algorithm As RijndaelManaged = New RijndaelManaged()
          algorithm.KeySize = keySize
          algorithm.IV = keyBuilder.GetBytes(CType(algorithm.BlockSize / 8, Integer))
          algorithm.Key = keyBuilder.GetBytes(CType(algorithm.KeySize / 8, Integer))
          algorithm.Padding = PaddingMode.PKCS7
          Return algorithm
      End Function
  End Class
  </code></pre>
  
  <p>I use IV "initialization_vector" as salt string, but at runtime an error is thrown: 'System.Security.Cryptography.CryptographicException' in mscorlib.dll. An error occurred: Padding is invalid and cannot be removed.</p>
  
  <p>Where am I doing wrong?</p>