Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/07/2008, 16:26
Avatar de Txoco
Txoco
 
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 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^^