I am trying to encrypt a file using streaming and vb.net. All the examples I have found only show how to encrypt text in a stream. I have been able to figure out how to get that to work on a file.
Basically as soon as the encryption is started it says finished. It creates a file call source.dmp.encrypted and the size is 0 KB
I added some output for troubleshooting but that didn't help. I am using the newest chilkat dll ( .net 4.0 ).
What am I doing wrong?
Here is what I have so far:
Try
Dim crypt As Chilkat.Crypt2 = New Chilkat.Crypt2
Dim success As Boolean = crypt.UnlockComponent("****************************")
If Not success Then
MessageBox.Show(crypt.LastErrorText)
Return
End If
crypt.CryptAlgorithm = "aes"
crypt.CipherMode = "cbc"
crypt.KeyLength = 256
crypt.SetEncodedIV("0000000000000000", "hex")
crypt.SetEncodedKey("abcdefghijklmnop", "ascii")
Dim fsIn As FileStream = File.OpenRead("source.dmp")
Dim fsOut As FileStream = File.Create("source.dmp.encrypted")
crypt.FirstChunk = True
crypt.LastChunk = False
Dim encryptedChunk() As Byte
'chilkat example says aes has a block size of 16 bytes
Dim b() As Byte = New Byte(1023 * 16) {}
Dim n As Integer
While ((n = fsIn.Read(b, 0, b.Length)) > 0)
If (n < b.Length) Then
' Don't encrypt the full 1024 bytes, only the amount read...
Dim tmp() As Byte = New Byte((n) - 1) {}
Dim i As Integer
i = 0
Do While (i < n)
tmp(i) = b(i)
i = (i + 1)
Loop
encryptedChunk = crypt.EncryptBytes(tmp)
Else
encryptedChunk = crypt.EncryptBytes(b)
End If
Console.WriteLine("Chunk Length=" + encryptedChunk.Length.ToString)
fsOut.Write(encryptedChunk, 0, encryptedChunk.Length)
crypt.FirstChunk = False
'Console.WriteLine("Writing Chunk")
End While
fsIn.Close()
' Flush any remaining encrypted data.
crypt.LastChunk = True
Dim empty() As Byte
encryptedChunk = crypt.EncryptBytes(empty)
If (encryptedChunk.Length > 0) Then
fsOut.Write(encryptedChunk, 0, encryptedChunk.Length)
End If
fsOut.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
MsgBox("Encryption finished")