ElTicus.com

Programación, lenguajes y recursos para programadores

**
Recurso no clasificado
Función para Encriptar y Desencriptar una cadena de texto
Rutina muy simple pero efectiva
Publicado por JL Fecha: 2007-04-19 13:40:13 Idioma: Español Tipo de documento: Código fuente

Como Encriptar y Desencriptar una cadena de texto

Para usar en tus programas. Puedes manejar las contraseñas encriptadas y guardadas en un campo de texto totalmente protegido, no es posible desencriptarlo sin conocer el metodo de desencriptar (o al menos no es nada fácil).

La funcion para encriptar es la siguiente:


Function Encripta(Pass As String) As String
 Dim Clave As String, i As Integer, Pass2 As String
 Dim CAR As String, Codigo As String
 Clave = "%ü&/@#$A"
 Pass2 = ""
 For i = 1 To Len(Pass)
  CAR = Mid(Pass, i, 1)
  Codigo = Mid(Clave, ((i - 1) Mod Len(Clave)) + 1, 1)
  Pass2 = Pass2 & Right("0" & Hex(Asc(Codigo) Xor Asc(CAR)), 2)
 Next i
 Encripta = Pass2
End Function

Para utilizarla simplemente escribimos

Clave=Encripta("Clave Muy Secreta")

Y despues de eso, Clave contendrá la cadena "66904759250369345CDC754A2351413544".

Teniendo la clave encriptada se puede guardar en la base de datos o hacer cualquier cosa con ella y para recuperar la cadena original utilizamos la siguiente función:


Function DesEncripta(Pass As String) As String
 Dim Clave As String, i As Integer, Pass2 As String
 Dim CAR As String, Codigo As String
 Dim j As Integer
 
 Clave = "%ü&/@#$A"
 Pass2 = ""
 j = 1
 For i = 1 To Len(Pass) Step 2
  CAR = Mid(Pass, i, 2)
  Codigo = Mid(Clave, ((j - 1) Mod Len(Clave)) + 1, 1)
  Pass2 = Pass2 & Chr(Asc(Codigo) Xor Val("&h" + CAR))
  j = j + 1
 Next i
 DesEncripta = Pass2
End Function

Si se fijan atentamente, es la misma función con un par de líneas distintas.

Y si usamos esta función sobre la cadena obtenida de la anterior sería con el código:

Original=DesEncripta("66904759250369345CDC754A2351413544")

y con eso obtenemos la cadena original.

Observaciones del encriptado.

  • El algoritmo utiliza un sistema de codificación a nivel de bits y los códigos resultantes se traducen despues a hexadecimal para complicar un poco mas la interpretación y tambien para asegurar que no se tengan caracteres extraños.
  • El resultado al ser un Hexadecimal, contendrá únicamente los números del 0 al 9 y las letras ABCDEF.
  • La cadena resultante contendrá siempre el doble de caracteres que la cadena original. Por lo que no se recomienda mucho para encriptar archivos completos. (además, hay que tomar esto en cuenta al definir el tamaño del campo en la base de datos)
  • Hay una variable Clave = "%ü&/@#$A" que se utiliza como array de bits para las operaciones XOR. Esa variable se puede modificar si usted lo desea y así haría imposible la desecripción por parte de alguien que también haya leido esta página.


NOTA: Si tu aplicación requiere de verdadera seguridad, no basta con nadamas encriptar el dato, ya que todavía se puede borrar o reemplazar el contenido del campo encriptado por otro tambien encriptado pero conocido y de esa forma permitir el acceso.

Te recomiendo que utilices algún esquema de comprobación cruzada entre los distintos campos que intervienen en la seguridad para complicarles un poco más la vida a los hackers.

La comprobación cruzada consiste en colocar uno o varios datos dentro de la contraseña antes de encriptarla y de esa forma puedes tu validar que esa contraseña esté relacionada con el login o con un registro espécifico y así si lo borran o reemplazan no les va a funcionar y además te darías cuenta del intento de violar tu sistema.





Hay 3 comentarios sobre este tema por parte de los lectores


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aquí: Imagen anti-spam =

Comentarios de parte de los lectores: