Como Encriptar y Desencriptar datos en Visual Basic .NET

Uno de los temas mas buscados en la actualidad, es el de Encriptar Datos y poder proteger información.

Numerosas herramientas nos dan solución a este problema, pero si de seguridad se trata, usted confiaría algo tan delicado a un código cerrado sin poder ver su funcionamiento ?

Es mejor meter mano a unos pocos conceptos y poder lograrlo por nuestra cuenta..

Lo que haremos es desarrollar una clase en Visual Basic.NET que nos permite llegar a esto. Puede hacerlo creando una clase (lo mas prolijo) o simplemente crea 2 funciones en un Modulo para poder acceder a ellas cuando quiera.

Usted elegirá la opción que mas le guste.

Es normal leer que la forma mas simple de Encriptar datos es usando una palabra clave… ej ( “MiPalabraClave” ) pero en el ejemplo que veremos aquí , le daré a usted una técnica mucho mas eficiente, menos HACKEABLE y segura, que simplemente usar una PalabraClave.

Usaremos 4 Constantes, las cuales le recomiendo que cree en My Proyect > Configuration

como pueden ver, he creado 4 Strings, llamados ClaveEncrip1, ClaveEncrip2, ClaveEncrip3 y ClaveEncrip4

Su contenido es numérico, 4 largos numeros  (ej. 45970564526786748948561053787889) , los 4 números deben ser diferentes.

El largo de los números es indistinto, pero es conveniente que no sea inferior a los 20 dígitos, ya que cada dígito se ocupará de cada caracter que deseamos encriptar.

Imaginemos un campo o texto a encriptar , por ejemplo “que linda la vida

q u e   l i n d a   l a   v i d a
4 5 9 7 0 5 6 4 5 2 6 7 8 6 7 4 8

Que hará nuestra rutina de Encriptación ? sumará los valores Ascii de cada Caractér con el de Cada Ascii del Número Correspondiente..

Ej .  q=103 y 4=52  , entonces el resultado es 155 

Así, con cada caracter que deseemos Encriptar.

Luego tomaremos el resultado, y repetiremos la operación, pero esta vez , no sumaremos, sino que restaremos el valor Ascii de la segunda cadena, en este caso my.settings.ClaveEncrip2

Luego a ese resultado le sumaremos my.settings.ClaveEncrip3 , y por último le restaremos My.Settings.ClaveEncrip4

De esta manera, no estamos modificando nuestro texto por una sola palabra (algo que con un poco de imaginación y las herramientas adecuadas, los Hackers podrían descifrarla) sino que le realizamos 4 operaciones.

Veamos el código Completo, el cual funciona a la perfección y lo pueden copiar y llevar a sus desarrollos.

Public Function Encriptar(ByVal Texto As String) as String
Dim LargoStr As Integer
Dim T1 As String, T2 As String, T3 As String, T4 As String
Dim t As String, v As Integer
Texto = Texto.Replace(" ", Chr(129))
LargoStr = Texto.Length

' Encripta con Clave 1

T1 = ""
For i = 1 To LargoStr
v = Asc(Mid$(Texto, i, 1))
t = Chr(v + Asc(Mid$(My.Settings.ClaveEncrip1, i, 1)))
T1 = T1 + t
Next

' Encripta con Clave 2

T2 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T1, i, 1))
t = Chr(v - Asc(Mid$(My.Settings.ClaveEncrip2, i, 1)))
T2 = T2 + t
Next

' Encripta con Clave 3

T3 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T2, i, 1))
t = Chr(v + Asc(Mid$(My.Settings.ClaveEncrip3, i, 1)))
T3 = T3 + t
Next

' Encripta con Clave 4

T4 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T3, i, 1))
t = Chr(v - Asc(Mid$(My.Settings.ClaveEncrip4, i, 1)))
T4 = T4 + t
Next
return T4
End Function

Y Para desencriptar hacemos el proceso Inverso, pero tomando primero el valor 4, luego el 3, 2, 1.

Public Function DesEncriptar(ByVal Texto As String) as String
Dim LargoStr As Integer
Dim T1 As String, T2 As String, T3 As String, T4 As String
Dim t As String, v As Integer

LargoStr = Texto.Length

' DesEncripta con Clave 4

T1 = ""
For i = 1 To LargoStr
v = Asc(Mid$(Texto, i, 1))
t = Chr(v + Asc(Mid$(My.Settings.ClaveEncrip4, i, 1)))
T1 = T1 + t
Next

' Encripta con Clave 3

T2 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T1, i, 1))
t = Chr(v - Asc(Mid$(My.Settings.ClaveEncrip3, i, 1)))
T2 = T2 + t
Next

' Encripta con Clave 2

T3 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T2, i, 1))
t = Chr(v + Asc(Mid$(My.Settings.ClaveEncrip2, i, 1)))
T3 = T3 + t
Next

' Encripta con Clave 1

T4 = ""
For i = 1 To LargoStr
v = Asc(Mid$(T3, i, 1))
t = Chr(v - Asc(Mid$(My.Settings.ClaveEncrip1, i, 1)))
T4 = T4 + t
Next
return T4.Replace(Chr(128), " ")
End Function

Esta rutina es facilmente adaptable a cualquier lenguaje y plataforma ya que no es mas que unos calculos con los valores Ascii de ciertos caracteres, y luego su representación mediante la función CHR()

Espero les sea de mucha utilidad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© VB-MUNDO – Visual Basic y mucho más
CyberChimps