Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Una pequeña duda de sustitucion de letras

Estas en el tema de Una pequeña duda de sustitucion de letras en el foro de Visual Basic clásico en Foros del Web. Muy buenas a todos, mi duda es que por ejemplo: En un cuadro de texto escribo ' Ola a todos ' Yo quiero que cada ...
  #1 (permalink)  
Antiguo 14/07/2008, 16:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 45
Antigüedad: 15 años, 11 meses
Puntos: 0
De acuerdo Una pequeña duda de sustitucion de letras

Muy buenas a todos, mi duda es que por ejemplo:
En un cuadro de texto escribo ' Ola a todos ' Yo quiero que cada letra sea sustituida por otra y asi obtener como una codificacion, y hacerlo a la inversa en otro cuadro de texto para decodificarlo, nose si me explico ...
Hola a todos = keif f mepeq

Decodificado:
keif f mepeq = Hola a todos

Espero que me entiendan xD

Como seria la codificacion ?

Saludos!
  #2 (permalink)  
Antiguo 14/07/2008, 16:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Una pequeña duda de sustitucion de letras

Puedes obtener el código ASCII (usando Asc) y luego sumarle cierta cantidad de números y nuevamente obtener el carácter asociado (usando Chr).

P.S.: Vaya sistema de encriptación . Es broma, quién nunca lo hizo así.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 14/07/2008, 16:26
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Una pequeña duda de sustitucion de letras

Hola!

Realmente, muy efectivo no es, pero siempre es entretenido escribir cosillas de estas. Lo que te propone David (se llama "cifrado del César" o "César" a secas), es el más sencillo de todos. Tanto ése como éste que te propongo (llamado "de sustitución") son muy fáciles de romper, y de hecho es lo primero que se enseña en criptografía (a romperlos), pero pueden servir para que, por ejemplo, los datos no se vean a simple vista.

Esta función es reversible, para decodificar una cadena, cambia el contenido de los parámetros CodigoOriginal y CodigoCifrado. Si pruebas la función con los que te he dejado, verás que te devuelve exactamente el ejemplo que has puesto

Código:
Public Function Cifrado(ByVal Entrada As String, _
                        Optional CodigoOriginal As String = " abcdefghijklmnñopqrstuvwxyz", _
                        Optional CodigoCifrado As String = " zyxwvutsrqpoñnmlkjihgfedcba") As String
Dim i As Long
Dim j As Long
Dim retStr As String
Dim c As String * 1
    
    Entrada = LCase(Entrada)
    
    For i = 1 To Len(Entrada)
        c = Mid(Entrada, i, 1)
        j = InStr(1, CodigoOriginal, c)
        If j > 0 Then
            retStr = retStr & Mid(CodigoCifrado, j, 1)
        Else
            retStr = retStr & c
        End If
    Next i
    
    Cifrado = retStr
End Function
Si cambias el código, ten cuidado de no repetir letras; las que no encuentre en la cadena CodigoOriginal, las dejará tal cual estén en Entrada.

Trastea todo lo que quieras con estos códigos, pero no los uses para nada serio

....

Me acabo de dar cuenta de que no dejé los parámetros por defecto que pensaba, luego tal cual está NO te va a devolver los ejemplos que pusiste... sin embargo, así es reversible: si le pasas el código descifrado, lo cifra, y si lo pasas cifrado, lo descifra, porque los códigos son simétricos. Esto no funcionaría si cambias una de las dos cadenas.

Última edición por Txoco; 15/07/2008 a las 01:53 Razón: Puse mal los parámetros u^^
  #4 (permalink)  
Antiguo 14/07/2008, 16:53
Avatar de Jhonnyf  
Fecha de Ingreso: septiembre-2007
Ubicación: Dentro de mi
Mensajes: 87
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Una pequeña duda de sustitucion de letras

Código:
Public Function Encrypta(Texto As String) As String
    Dim i As Integer
    Dim Char As String
    Dim Temp As String
    For i = 1 To Len(Texto)
        Char = Mid$(Texto, i, 1)
        Temp = Temp & Chr(Asc(Char) + i)
    Next
    Encrypta = Temp
End Function
Código:
Public Function DesEncrypta(Texto As String) As String
    Dim Temp As String
    Dim i As Integer
    Dim Char As String
    For i = 1 To Len(Texto)
        Char = Mid$(Texto, i, 1)
        Temp = Temp & Chr(Asc(Char) - i)
    Next
    DesEncrypta = Temp
End Function
Para un mejor Cifrado las uso 2 veces
Texto = Encrypta(Encrypta("Hola a todos"))
OtroTexto = DesEncrypta(DesEncrypta("Jsri*m.„�x…‹"))

Si la usas mas de 3 veces muere XD

Saludos
  #5 (permalink)  
Antiguo 15/07/2008, 15:21
 
Fecha de Ingreso: mayo-2008
Mensajes: 45
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Una pequeña duda de sustitucion de letras

Muchas gracias!
Igual no es para hacer ningun tipo de trabajo, solo para no mostrar cosas a simple vista, se " encripta" y quien lo va a entender xD!

Saludos!
  #6 (permalink)  
Antiguo 18/05/2010, 15:05
Avatar de simplementeronin  
Fecha de Ingreso: mayo-2010
Mensajes: 23
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Una pequeña duda de sustitucion de letras

Disculpen, pero estoy aprendiendo visual basic 6.0 y me gustaria si alguien me puede pasar el codigo fuente del "cifrado cesar"... es para estudiarlo mejor...


desde ya muchas gracias...


Atte: <<-- SimplementeRonin -->>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:52.