Encriptacion con VB.Net (básico)

jueves, 23 de abril de 2009

Este post es para mostrar algo de código, como se puede usar el namespace de cryptography para encriptar un mensaje y volverlo a su estado original.

Para este ejemplo he usado DES(Data encription Standard) que es uno de los mas básicos, pero asi como implemente este se puede cambiar a cualquiera de los métodos simetricos de encriptación que vienen con .Net

Para ver mas informacion sobre Criptografia en .Net ver:System.Security.Cryptography

El código es el siguiente:

 

    Imports System.Security.Cryptography
Imports System.IO
''' <summary>
''' permite encriptar un mensaje haciendo uso de uno de los servicios de encriptacion mas básicos
''' </summary>
''' <param name="message">Mensaje a encriptar</param>
''' <param name="key">Llave de encriptacion</param>
''' <param name="iv">Vector de inicializacion</param>
''' <returns>Coleecion de bytes que representan el mensaje encriptado</returns>
''' <remarks>Si bien este código hace uso del metodo DES sobrecargar este con los
''' demas metodos simetricos no implica mayor complejidad</remarks>
Private Function Encrypt(ByVal message() As Byte, ByVal key() As Byte, ByVal iv() As Byte) As Byte()
Dim des As DES = New DESCryptoServiceProvider
Dim crypto As ICryptoTransform = des.CreateEncryptor(key, iv)
Dim cipherstream As New MemoryStream()
Dim cryptostream As New CryptoStream(cipherstream, crypto, CryptoStreamMode.Write)
cryptostream.Write(message, 0, message.Length)
cryptostream.Close()
Return cipherstream.ToArray()

End Function
''' <summary>
''' permite desencriptar un mensaje haciendo uso de uno de los servicios de encriptacion mas básicos
''' </summary>
''' <param name="cypherText">Mensaje Encriptado</param>
''' <param name="iv">Vector de inicializacion</param>
''' <param name="key">Llave de encriptacion</param>
''' <remarks></remarks>
Private Function Decrypt(ByVal cypherText() As Byte, ByVal iv() As Byte, ByVal key() As Byte) As String
Dim des As DES = New DESCryptoServiceProvider()
Dim crypto As ICryptoTransform = des.CreateDecryptor(key, iv)
Dim cipherStream As New MemoryStream(cypherText)
Dim cryptostrm As New CryptoStream(cipherStream, crypto, CryptoStreamMode.Read)
Dim message As String
message = New StreamReader(cryptostrm).ReadToEnd()
Return message
End Function

sub main()
'Usando los métodos creados con un archivo de texto
Dim result() As Byte
Dim algo As New FileStream("prueba.txt", FileMode.Open)
Dim mifile(algo.Length) As Byte
Dim mikey() As Byte = BitConverter.GetBytes(123465789123456789)
Dim miiv() As Byte = BitConverter.GetBytes(987654321987654321)
algo.Read(mifile, 0, algo.Length)
result = Encrypt(mifile, mikey, miiv)
Console.WriteLine("en encrypto")
Console.WriteLine(BitConverter.ToString(result))
Console.Read()
Console.WriteLine(Decrypt(result, miiv, mikey))
Console.Read()
end sub

0 comments:

Publicar un comentario