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