Consulta: Una clase sencilla para encriptar cadenas

tema enviado por Pcosta en Visual Basic .NET
tema iniciado el 08/11/2006

Hola, estaba leyendo el articulo publicado con el nombre “Una clase sencilla para encriptar cadenas”, y mi problema es que al probarlo el algoritmo que desencripta no me funciona cuando ingreso cadenas largas. Por ejemplo “77777777777777777” me lo desencripta como "777777777777777n7". He estado tratando de descubrir cual es el error pero no puedo encontrarlo.

El codigo que uso es el mismo que el del articulo y las cadenas patrones son:

Private patron_busqueda As String = "pPnloWct7FXh0Z8brsy9SazfMKJNUduArÑOTL5HQDñVq4RBnvYImGxeg1i3wjk6EC2"

Private Patron_encripta As String = "TknAyc5Fo6aX8rÑvLNPzYgqMKhO4GHWSxJRwUb0IrVdCu7RiQZefEñmBt9l3jsDp12"

Por si acaso pego tambien el codigo del programa, si alguien sabe que puede estar fallando, agradeceria su ayuda. 

Tambien quiero agradecer a Pedro por haber publicado este tan interesante articulo.

Muchas gracias.

Pablo

Public Class Criptografia

Private patron_busqueda As String = "pPnloWct7FXh0Z8brsy9SazfMKJNUduArÑOTL5HQDñVq4RBnvYImGxeg1i3wjk6EC2"

Private Patron_encripta As String = "TknAyc5Fo6aX8rÑvLNPzYgqMKhO4GHWSxJRwUb0IrVdCu7RiQZefEñmBt9l3jsDp12"

Public Function EncriptarCadena(ByVal cadena As String) As String

Dim idx As Integer

Dim result As String

For idx = 0 To cadena.Length - 1

result += EncriptarCaracter(cadena.Substring(idx, 1), cadena.Length, idx)

Next

Return result

End Function

Private Function EncriptarCaracter(ByVal caracter As String, _

ByVal variable As Integer, _

ByVal a_indice As Integer) As String

Dim caracterEncriptado As String, indice As Integer

If patron_busqueda.IndexOf(caracter) <> -1 Then

indice = (patron_busqueda.IndexOf(caracter) + variable + a_indice) Mod patron_busqueda.Length

Return Patron_encripta.Substring(indice, 1)

End If

Return caracter

End Function

Public Function DesEncriptarCadena(ByVal cadena As String) As String

 

Dim idx As Integer

Dim result As String

For idx = 0 To cadena.Length - 1

result += DesEncriptarCaracter(cadena.Substring(idx, 1), cadena.Length, idx)

Next

Return result

End Function

 

Private Function DesEncriptarCaracter(ByVal caracter As String, _

ByVal variable As Integer, _

ByVal a_indice As Integer) As String

 

Dim indice As Integer

If Patron_encripta.IndexOf(caracter) <> -1 Then

If (Patron_encripta.IndexOf(caracter) - variable - a_indice) > 0 Then

indice = (Patron_encripta.IndexOf(caracter) - variable - a_indice) Mod Patron_encripta.Length

Else

indice = (patron_busqueda.Length) + ((Patron_encripta.IndexOf(caracter) - variable - a_indice) Mod Patron_encripta.Length)

End If

indice = indice Mod Patron_encripta.Length

Return patron_busqueda.Substring(indice, 1)

Else

Return caracter

End If

End Function

 

End Class