Descargas de archivos, y codigos CRC en vb.NET

En los últimos días, tuve que implementar (como siempre, al apuro) una aplicación que visualice archivos PDF desde un repositorio central de archivos, utilizando Visual Basic .NET, con el limitante de que los archivos PDF que son visualizados no deben ser guardados directamente por el usuario en su computador.

Para esto, del lado del cliente, se implementó una pequeña aplicación que descarga el archivo PDF mediante una solicitud a una URL, utilizando la siguiente función:

Public Sub descargaArchivo(ByVal _urlOrigen As String, ByVal _archivoDestino As String)
        Try
            Dim _WebClient As New System.Net.WebClient()
            _WebClient.DownloadFile(_urlOrigen, _archivoDestino)
        Catch _Exception As Exception
            MessageBox.Show("Se ha Producido una excepción de descarga: {0}", _Exception.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End Sub

El uso des esta funcion es sencillo: se ingresa como parámetros la url de descarga del archivo, y la ruta donde se desee guardar el mismo. Para ocultar un poco el acceso directo al archivo descargado, usamos la hora actual del sistema, y hacemos que guarde el archivo descargado en la carpeta temporal de windows, con los siguientes comandos:

Dim timestamp As String = Date.Now.TimeOfDay.ToString
timestamp = timestamp.Replace(":", "")
timestamp = timestamp.Replace(".", "")
Dim archivo As String = System.IO.Path.GetTempPath.ToString + timestamp + ".pdf"

….. facil, sencillo y transparente para el usuario

Otra función que me resultó bastante útil, es la que realizamos para obtener un Código de Checksum SHA256 para comparar la huella de los archivos indexados en una base de datos contra los archivos descargados. La función es bastante sencilla, y es la siguiente:

Private Function calculaChecksum(archivo) As String
        Using Stream As FileStream = File.OpenRead(archivo)
            Dim sha As SHA256Managed = New SHA256Managed
            Dim checksum As Byte() = sha.ComputeHash(Stream)
            Return BitConverter.ToString(checksum).Replace("-", String.Empty)
        End Using
End Function

Esta funcion requiere la ruta real de acceso al archivo del que se desea obtener el checksum, y devuelve el código hash como un string.

Para eta función, es necesario importar las siguiente librerías:

Imports System.IO
Imports System.Security.Cryptography

que proveen soporte para el manejo de archivos, y las funciones de criptografía.