Utilizado, de ahí su nombre, por Julio César para comunicarse con sus oficiales, consiste en sustituir cada letra del mensaje por la que está n posiciones más adelante o atrás en el alfabeto.
Si n = 3, la A se sustituiría por la D, la B por E, la C por la F y así sucesivamente. De este modo, la palabra ABC se transforma en DEF encriptada, siendo n la llave (key) para poder decifrarla.
El proyecto.
1. Crea un nuevo proyecto en vb.net, la interfaz es sencilla y consiste en unos cuantos controles como en la imagen
2. Crea una nueva clase, llamala "Cesar.vb", esta clase estara compuesta por tres funciones, encriptar(), desencriptar() y clean(), esta ultima una funcion privada tiene el trabajo de limpiar el codigo de "retornos de carro" y de "caracteres especiales" que no se encuentren en la tabla predefinida para ello.
El codigo fuente de la clase Cesar.vb
Public Class Cesar
'almacena todos los caracteres permitidos en el mensaje
Private Const tabla = "abcdefghijklmnopqrstuvwxyz 0123456789ABCDEFGHIJLKMNOPQRSTUVWXYZ,.-;:_{}[]+*\¿?!¡#$&/()=áéíóúÁÉÍÓÚñÑ" + Chr(13)
Private resultado As String
Private i As Integer
Private pos As Integer
Function Encriptar(ByVal texto As String, ByVal key As Integer) As String
resultado = ""
texto = clean(texto)
For i = 0 To (texto.Length - 1)
'buscar la posicion del caracter
pos = tabla.IndexOf(texto.Chars(i))
'realiza el reemplazo de caracteres
If (pos + key) < tabla.Length Then
resultado = resultado + tabla.Chars(pos + key)
Else
resultado = resultado + tabla.Chars((pos + key) - tabla.Length)
End If
Next
'reconstruye el mensaje con los retornos de carro
resultado = resultado.Replace("{.13}", vbCrLf)
Return resultado
End Function
Function Desencriptar(ByVal texto As String, ByVal key As Integer) As String
resultado = ""
texto = clean(texto)
For i = 0 To (texto.Length - 1)
pos = tabla.IndexOf(texto.Chars(i))
If ((pos - key) < 0) Then
resultado = resultado + tabla.Chars((pos - key) + tabla.Length)
Else
resultado = resultado + tabla.Chars(pos - key)
End If
Next
resultado = resultado.Replace("{.13}", vbCrLf)
Return resultado
End Function
Private Function clean(ByVal t As String) As String
' reemplaza el retorno de carro con un simbolo
t = t.Replace(vbCrLf, "{.13}")
' reemplaza los caracteres que no se encuentran en la tabla por un simbolo
For i = 0 To (t.Length - 1)
pos = tabla.IndexOf(t.Chars(i))
If (pos = -1) Then
t = t.Replace(t.Chars(i), "{.d}")
End If
Next
Return t
End Function
End Class
Resultado
Gracias excelente
ResponderEliminarGracias men por el codigo esta genial, pero podrias tambien publicar el codigo de los botones ya q no he podido hacerlo funcionar y vi otro post donde esta el ejercicio en java con el codigo de los botones, pero lo necesito en .net.
ResponderEliminarGracias men, te agrdesco