title: A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
body: <p>I a building a program that can ecnrypt and decrypt files using rijndael algorithm. But if i debug i get the following error: </p>
  
  <blockquote>
    <p>A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll</p>
  </blockquote>
  
  <p>this is my code:</p>
  
  <pre><code>    Imports crypter.crypter
  Public Class Form1
  
    Private Sub btnEncrypt_Click(sender As System.Object, e As System.EventArgs) Handles btnEncrypt.Click
      Dim objCrypter As New crypter.crypter
      Dim strPass As String = txtPass.Text
      Dim bytkey As Byte()
      Dim bytIV As Byte()
  
      bytkey = objCrypter.CreateKey(strPass)
      bytIV = objCrypter.CreateIV(strPass)
  
      objCrypter.EncryptOrDecryptFile(txtSource.Text, txtDestination.Text, bytkey, bytIV, CryptoAction.ActionEncrypt)
  
  
    End Sub
  
  
    Private Sub btnDecrypt_Click(sender As Object, e As System.EventArgs) Handles btnDecrypt.Click
      Dim objCrypter As New crypter.crypter
      Dim strPass As String = txtPass.Text
      Dim bytkey As Byte()
      Dim bytIV As Byte()
  
      bytkey = objCrypter.CreateKey(strPass)
      bytIV = objCrypter.CreateIV(strPass)
  
      objCrypter.EncryptOrDecryptFile(txtSource.Text, txtDestination.Text, bytkey, bytIV, crypter.crypter.CryptoAction.ActionDecrypt)
  
    End Sub
  End Class
  </code></pre>
  
  <p>and this is my code from my class crypter </p>
  
  <pre><code>Imports System
  Imports System.IO
  Imports System.Security
  Imports System.Security.Cryptography
  
  Public Class crypter
  #Region "1. Global Variables "
  
      '*************************
      '** Global Variables
      '*************************
  
      Dim strFileToEncrypt As String
      Dim strFileToDecrypt As String
      Dim strOutputEncrypt As String
      Dim strOutputDecrypt As String
      Dim fsInput As System.IO.FileStream
      Dim fsOutput As System.IO.FileStream
  
  #End Region
  
  
  #Region "2. Create A Key "
  
      '*************************
      '** Create A Key
      '*************************
  
      Private Function CreateKey(ByVal strPassword As String) As Byte()
          'Convert strPassword to an array and store in chrData.
          Dim chrData() As Char = strPassword.ToCharArray
          'Use intLength to get strPassword size.
          Dim intLength As Integer = chrData.GetUpperBound(0)
          'Declare bytDataToHash and make it the same size as chrData.
          Dim bytDataToHash(intLength) As Byte
  
          'Use For Next to convert and store chrData into bytDataToHash.
          For i As Integer = 0 To chrData.GetUpperBound(0)
              bytDataToHash(i) = CByte(Asc(chrData(i)))
          Next
  
          'Declare what hash to use.
          Dim SHA512 As New System.Security.Cryptography.SHA512Managed
          'Declare bytResult, Hash bytDataToHash and store it in bytResult.
          Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
          'Declare bytKey(31).  It will hold 256 bits.
          Dim bytKey(31) As Byte
  
          'Use For Next to put a specific size (256 bits) of 
          'bytResult into bytKey. The 0 To 31 will put the first 256 bits
          'of 512 bits into bytKey.
          For i As Integer = 0 To 31
              bytKey(i) = bytResult(i)
          Next
  
          Return bytKey 'Return the key.
      End Function
  
  #End Region
  
  
  #Region "3. Create An IV "
  
      '*************************
      '** Create An IV
      '*************************
  
      Private Function CreateIV(ByVal strPassword As String) As Byte()
          'Convert strPassword to an array and store in chrData.
          Dim chrData() As Char = strPassword.ToCharArray
          'Use intLength to get strPassword size.
          Dim intLength As Integer = chrData.GetUpperBound(0)
          'Declare bytDataToHash and make it the same size as chrData.
          Dim bytDataToHash(intLength) As Byte
  
          'Use For Next to convert and store chrData into bytDataToHash.
          For i As Integer = 0 To chrData.GetUpperBound(0)
              bytDataToHash(i) = CByte(Asc(chrData(i)))
          Next
  
          'Declare what hash to use.
          Dim SHA512 As New System.Security.Cryptography.SHA512Managed
          'Declare bytResult, Hash bytDataToHash and store it in bytResult.
          Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
          'Declare bytIV(15).  It will hold 128 bits.
          Dim bytIV(15) As Byte
  
          'Use For Next to put a specific size (128 bits) of 
          'bytResult into bytIV. The 0 To 30 for bytKey used the first 256 bits.
          'of the hashed password. The 32 To 47 will put the next 128 bits into bytIV.
          For i As Integer = 32 To 47
              bytIV(i - 32) = bytResult(i)
          Next
  
          Return bytIV 'return the IV
      End Function
  
  #End Region
  
  
  #Region "4. Encrypt / Decrypt File "
  
      '****************************
      '** Encrypt/Decrypt File
      '****************************
  
      Private Enum CryptoAction
          'Define the enumeration for CryptoAction.
          ActionEncrypt = 1
          ActionDecrypt = 2
      End Enum
  
      Private Sub EncryptOrDecryptFile(ByVal strInputFile As String, _
                                       ByVal strOutputFile As String, _
                                       ByVal bytKey() As Byte, _
                                       ByVal bytIV() As Byte, _
                                       ByVal Direction As CryptoAction)
          Try 'In case of errors.
  
              'Setup file streams to handle input and output.
              fsInput = New System.IO.FileStream(strInputFile, FileMode.Open, _
                                                 FileAccess.Read)
              fsOutput = New System.IO.FileStream(strOutputFile, FileMode.OpenOrCreate, _
                                                  FileAccess.Write)
              fsOutput.SetLength(0) 'make sure fsOutput is empty
  
              'Declare variables for encrypt/decrypt process.
              Dim bytBuffer(4096) As Byte 'holds a block of bytes for processing
              Dim lngBytesProcessed As Long = 0 'running count of bytes processed
              Dim lngFileLength As Long = fsInput.Length 'the input file's length
              Dim intBytesInCurrentBlock As Integer 'current bytes being processed
        Dim csCryptoStream As CryptoStream
              'Declare your CryptoServiceProvider.
              Dim cspRijndael As New System.Security.Cryptography.RijndaelManaged
  
  
              'Determine if ecryption or decryption and setup CryptoStream.
              Select Case Direction
                  Case CryptoAction.ActionEncrypt
                      csCryptoStream = New CryptoStream(fsOutput, _
                      cspRijndael.CreateEncryptor(bytKey, bytIV), _
                      CryptoStreamMode.Write)
  
                  Case CryptoAction.ActionDecrypt
                      csCryptoStream = New CryptoStream(fsOutput, _
                      cspRijndael.CreateDecryptor(bytKey, bytIV), _
                      CryptoStreamMode.Write)
              End Select
  
              'Use While to loop until all of the file is processed.
              While lngBytesProcessed &lt; lngFileLength
                  'Read file with the input filestream.
                  intBytesInCurrentBlock = fsInput.Read(bytBuffer, 0, 4096)
                  'Write output file with the cryptostream.
                  csCryptoStream.Write(bytBuffer, 0, intBytesInCurrentBlock)
                  'Update lngBytesProcessed
                  lngBytesProcessed = lngBytesProcessed + CLng(intBytesInCurrentBlock)
              End While
  
              'Close FileStreams and CryptoStream.
              csCryptoStream.Close()
              fsInput.Close()
              fsOutput.Close()
  
              'If encrypting then delete the original unencrypted file.
              If Direction = CryptoAction.ActionEncrypt Then
                  Dim fileOriginal As New FileInfo(strFileToEncrypt)
                  fileOriginal.Delete()
              End If
  
              'If decrypting then delete the encrypted file.
              If Direction = CryptoAction.ActionDecrypt Then
                  Dim fileEncrypted As New FileInfo(strFileToDecrypt)
                  fileEncrypted.Delete()
              End If
  
          Catch
              fsInput.Close()
              fsOutput.Close()
  
              If Direction = CryptoAction.ActionDecrypt Then
                  Dim fileDelete As New FileInfo(strOutputFile)
                  fileDelete.Delete()
  
              Else
                  Dim fileDelete As New FileInfo(strOutputFile)
                  fileDelete.Delete()
  
  
              End If
  
          End Try
      End Sub
  
  #End Region
  
  End Class
  </code></pre>
  
  <p>Does anybody have an idea about what might be my mistake?</p>
  
  <p>Thanks in advance,</p>