Anuncio

Colapsar
No hay ningún anuncio todavía.

Encriptación / Desencriptación

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Matlab Encriptación / Desencriptación

    Buenas. Tengo una pregunta sobre un código que copié en clase y que por desgracia no presté mucha atención cuando el profesor lo explicaba. Se trata de un algoritmo de cifrado basado en el cifrado de Vigenère. El programa es el siguiente:


    [FONT=Fixedsys]function r=codifica_vigemere(texto,clave)
    r='';
    k2=1;
    for k=1:length(texto)
    if texto(k)>='A' && texto(k) <= 'Z' %En caso de ser una letra mayuscula...
    desp=clave(mod(k2-1,length(clave))+1)-'A'; %%Habia un +1
    r(k)='A'+mod(texto(k)-'A'+desp, 'Z'-'A'+1);
    k2=k2+1;
    else
    r(k)=texto(k);
    end
    end
    end[/FONT]

    ¿Qué representa desp? ¿Y qué pinta ahí ese mod? ¿Me tengo que aprender este algoritmo de memoria por si lo piden en examen o hay alguna forma de razonarlo?

    Espero ansioso vuestra respuesta.

    Saludos!

  • #2
    Re: Encriptación / Desencriptación

    La funcion mod (por módulo o resto) te permite reducir un valor a un rango o período determinado. Un ejemplo: supón que tienes un número que aumenta indefinidamente, como en este caso con la variable k2. Tu puedes reducir el valor de la variable a un rango predeterminado (en el programa, la longitud de la clave) tomando el resto de la división, es decir, la función módulo. Si la clave tiene longitud 5, por ejemplo, tendrías:

    Esa última construcción te permite ir tomando en secuencia los valores del 1 al 5 repitiendo indefinidamente el ciclo.

    La línea del programa

    [FONT=Fixedsys]desp=clave(mod(k2-1,length(clave))+1)-'A'[/FONT]

    lo que hace es calcular un desplazamiento (?) en la secuencia ASCII que corresponda a la secuencia en clave, repitiendo desde el principio cada vez que agote las letras de clave. Siguiendo el ejemplo anterior, supón que la clave es "SKINR", entonces tendrías

    El número que obtienes al final es un valor que cuenta cuantas letras vas a desplazar cada letra del mensaje a codificar. Posteriormente lo que haces es desplazar cada letra del mensaje a codificar una distancia igual al desplazamiento de la letra correspondiente en la clave.

    Resumiendo en términos mas sencillos, lo que hace el procedimiento es sumar el valor ASCII de cada letra del texto a codificar con la letra que le corresponda en la clave, repitiendo la clave tantas veces como sea necesario para cubrir todo el texto a codificar:

    Creo que hay un errorcito en el programa tal como está codificado. Creo que el resultado se supone que debería dar caracteres de la A a la Z, y se sale de ese rango... no se si sería esa la intención.

    Bueno, ya me extendí mucho. Espero no haberte aburrido.

    Saludos,

    Al

    PD. No hay error en la codificación del programa, el error fue mío al calcular la línea "suma".
    Última edición por Al2000; 12/06/2011, 05:46:49. Motivo: Añadir postdata.
    Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

    Comentario


    • #3
      Re: Encriptación / Desencriptación

      Magnífico el mensaje, gracias por haberte tomado semejante molestia. Ahora por fin entiendo el uso del mod.

      Pero una última pregunta: ¿por qué resta 'A' en:[FONT=Fixedsys] desp=clave(mod(k2-1,length(clave))+1)-'A'[/FONT] ?

      Podría también haber restado 'B', ¿no?

      Saludos y mil gracias

      Comentario


      • #4
        Re: Encriptación / Desencriptación

        Pues lo que están haciendo es calcular el desplazamiento desde el principio del alfabeto. ¿Pudo usarse B? Supongo que si, simplemente llevaría a una codificación ligeramente diferente.

        Saludos,

        Al
        Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

        Comentario

        Contenido relacionado

        Colapsar

        Trabajando...
        X