Entiendo usa Rijndael, AES o cualquiera de estos algorítmos, las clases ya están hechas en
System.Security.Cryptography y todos funcionan igual, la forma de leer los archivos byte a byte o en array de byte() es
System.IO.Stream Aquí te traigo un ejemplo de una función de la Clase Rijndael que hice cuando la necesite:
Este es un ejemplo muy básico tendrás que editarlo un poco porque yo me salte el vector de inicialización usando el MD5 de la llave y otras configuraciones las deje por defecto, te coloco el código como ejemplo porque lo tengo a la mano pero al menos tomate la molestía de ver como funciona
#Region " Algoritmo Rijndael "
Public Function MD5(ByVal InputStr As String) As String
Dim MD5_Hasher As Cryptography.MD5 = Cryptography.MD5.Create()
Dim [DATA] As Byte() = MD5_Hasher.ComputeHash(Encoding.Default.GetBytes(InputStr))
Dim StrBuild As New StringBuilder()
For x As Integer = 0 To ([DATA].Length - 1)
StrBuild.Append([DATA](x).ToString("x2"))
Next
Return StrBuild.ToString()
End Function
Public Enum RijndaelAction
Crypt
Decrypt
End Enum
Public Function Rijndael(ByVal [Data] As Byte(), ByVal Key As Byte(), ByVal Action As RijndaelAction) As Byte()
Rijndael = New Byte() {}
Dim R As [Rijndael] = Cryptography.Rijndael.Create
With Encoding.Default
R.Key = Key
R.IV = .GetBytes(MD5(.GetString(R.Key)).Substring(0, 16))
Dim ResultStream As New MemoryStream
Dim CryptStream As CryptoStream = Nothing
Select Case Action
Case RijndaelAction.Crypt
CryptStream = New CryptoStream(ResultStream, R.CreateEncryptor, CryptoStreamMode.Write)
Case RijndaelAction.Decrypt
CryptStream = New CryptoStream(ResultStream, R.CreateDecryptor, CryptoStreamMode.Write)
End Select
CryptStream.Write([Data], 0, [Data].Length)
CryptStream.FlushFinalBlock()
Return ResultStream.ToArray
End With
End Function
#End Region