comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[C] Code/Decode Cifrado Garbo

  • 3 Respuestas
  • 1721 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado S[e]C

  • *
  • Underc0der
  • Mensajes: 42
  • Actividad:
    0%
  • Reputación 0
  • I am mine.
    • Ver Perfil
    • Undersecurity
« en: Marzo 31, 2010, 03:28:05 pm »
Citar
Juan Pujol García (Barcelona, España, 14 de febrero de     1912 - Caracas, Venezuela, 10 de octubre de 1988) conocido por su     nombre en clave británico Garbo, y por su nombre en     clave alemán Arabel, fue un agente doble español     que desempeñó un papel clave en el éxito del Desembarco de     Normandía al final de la Segunda Guerra Mundial. La información     falsa que Pujol proporcionó a Alemania ayudó a convencer a Hitler     de que el ataque principal sería más tarde y en otro lugar, lo que     resultó en su decisión de reducir las tropas en la zona del     desembarco.

You are not allowed to view links. Register or Login

Durante su desempeño como agente doble Garbo empleo entre otros
algoritmos de cifrado, el que veremos a continuación:

La base del algoritmo son los siguiente alfabetos:



Para cifrar un texto mediante este algoritmo se siguen los siguientes pasos:

Supondremos la siguiente cadena: “ARABEL”

1º- Se considera como indice de cada letra de la cadena su respectiva
posicion, es decir:



2º- se Obtiene para cada letra, su indice módulo 5, y para indices
menores que cinco solo se considera su indice, es decir:



3º-
Ahora dependiendo el modulo obtenido para cada letra, se decide con
que alfabeto sera cifrada(este proceso se realiza dos veces, se cifra cada caracter dos veces), por lo tanto para nuestro ejemplo seria:



Links sobre el tema: You are not allowed to view links. Register or Login - You are not allowed to view links. Register or Login - You are not allowed to view links. Register or Login

Una implementacion del cifrado y descifrado del mismo algoritmo en lenguaje C por mi, aca:

Código: C
  1. /**********************************************
  2. * Nombre        : garbo.c
  3. * Author        : S[e]C
  4. * Date          : 30-06-09
  5. * Description   : Code/Decode Cifrado Garbo
  6. ***********************************************/
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11.  
  12. /*
  13.  * Alfabeto original y los 5 alfabetos de cifrado
  14.  */
  15.  
  16. char alfabeto[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  17. char alf1[]    ="GHIJKLMNOPQRSTUVWXYZABCDEFghijklmnopqrstuvwxyzabcdef";
  18. char alf2[]    ="EFGHIJKLMABCDNOPQRSTZUVWXYefghijklmabcdnopqrstzuvwxy";
  19. char alf3[]    ="AZYBXCWDVEFUTGHSRIJQKPLMONazybxcwdvefutghsrijqkplmon";
  20. char alf4[]    ="QRSTUVWXYZBACEDFHGJILKMONPqrstuvwxyzbacedfhgjilkmonp";
  21. char alf5[]    ="DEGFIHJABCKOLMNPRQTSVUZXYWdegfihjabckolmnprqtsvuzxyw";
  22.  
  23. //Prototipo funciones cifrado y descifrado
  24. void cifra(char *text);
  25. void descifra(char *text);
  26.  
  27. int main(void)
  28. {
  29.     char cad[50];
  30.     You are not allowed to view links. Register or Login(stdout,"Cadena a cifrar\t:");
  31.     You are not allowed to view links. Register or Login(stdin,"%s",cad);
  32.     cifra(cad);    //primera pasada
  33.     cifra(cad);    //segunda pasada
  34.     You are not allowed to view links. Register or Login("Cadena codificada\t:%s\n",cad);
  35.     descifra(cad); //revierte primera pasada
  36.     descifra(cad); //revierte segunda pasada
  37.     You are not allowed to view links. Register or Login("\nCadena decodificada\t:%s\n",cad);
  38.     You are not allowed to view links. Register or Login(stdin,NULL);
  39.     You are not allowed to view links. Register or Login();
  40.     return 0;
  41. }
  42.  
  43. void cifra(char *text)
  44. {
  45.      int i,k,modulo;
  46.      for(i=0;*(text+i)!='\0';i++)
  47.      {
  48.        modulo=(i+1)%5; /* Obtengo el modulo de la posicion+1  ya que se considera desde
  49.                           la letra Nº 1 de la cadena, no la posicion numero 0 de ella. */
  50.           switch(modulo)
  51.           {
  52.                        
  53.            case 0: //si el modulo es 0 uso el alfabeto 5
  54.                 for(k=0;*(alfabeto+k)!='\0';k++) //miro cada letra del alfabeto
  55.                 {
  56.                    if(*(text+i)==*(alfabeto+k))  //y comparo con la primera letra de la cadena
  57.                       {                          //si son iguales:
  58.                         *(text+i)=*(alf5+k);     //le asigno el valor del alfabeto de cifrado correspondiente(alfX)
  59.                         break;                   //salgo del ciclo.
  60.                       }
  61.                 }
  62.                 break;
  63.                        
  64.            case 1:  //si el modulo es 1 uso el alfabeto 1
  65.                 for(k=0;*(alfabeto+k)!='\0';k++)
  66.                 {
  67.                    if(*(text+i)==*(alfabeto+k))
  68.                       {
  69.                         *(text+i)=*(alf1+k);
  70.                         break;
  71.                       }
  72.                      
  73.                 }
  74.                 break;
  75.            case 2:  // si el modulo es 2 uso el alfabeto 2
  76.                 for(k=0;*(alfabeto+k)!='\0';k++)
  77.                 {
  78.                    if(*(text+i)==*(alfabeto+k))
  79.                       {
  80.                         *(text+i)=*(alf2+k);
  81.                         break;  
  82.                       }
  83.                        
  84.                 }
  85.                 break;
  86.            case 3: // si el modulo es 3 uso el alfabeto 3
  87.                 for(k=0;*(alfabeto+k)!='\0';k++)
  88.                 {
  89.                    if(*(text+i)==*(alfabeto+k))
  90.                       {
  91.                         *(text+i)=*(alf3+k);
  92.                         break;
  93.                       }
  94.                        
  95.                 }
  96.                 break;
  97.            case 4: // si el modulo es 4 uso el alfabeto 4
  98.                 for(k=0;*(alfabeto+k)!='\0';k++)  
  99.                 {
  100.                    if(*(text+i)==*(alfabeto+k))
  101.                       {
  102.                         *(text+i)=*(alf4+k);  
  103.                         break;
  104.                       }
  105.                 }
  106.                 break;
  107.            default: // si el modulo es 4 uso el alfabeto 4
  108.                 for(k=0;*(alfabeto+k)!='\0';k++)  
  109.                 {
  110.                    if(*(text+i)==*(alfabeto+k))
  111.                       {
  112.                         *(text+i)=*(alf5+k);  
  113.                         break;
  114.                       }
  115.                 }
  116.           }
  117.      }
  118. }
  119.  
  120. void descifra(char *text)
  121. {
  122.      int i,k,modulo;
  123.      for(i=0;*(text+i)!='\0';i++)
  124.      {
  125.        modulo=(i+1)%5;  //Obtengo el modulo, IDEM que en el proceso de cifrado
  126.           switch(modulo)
  127.           {
  128.            case 0: //si el modulo es 0 decodifico la letra buscando en el alfabeto 5
  129.                 for(k=0;*(alf5+k)!='\0';k++)     //miro cada letra del alfabeto X
  130.                 {                                //( X = alfabeto correspondiente al modulo )
  131.                    if(*(text+i)==*(alf5+k))      //comparo con la primera letra de la cadena
  132.                       {                          //si son iguales:
  133.                         *(text+i)=*(alfabeto+k); //Le asigno la letra correspondiente
  134.                         break;                   //en el alfabeto Original, y salgo del ciclo.
  135.                       }
  136.                 }
  137.                 break;
  138.                        
  139.            case 1: //si el modulo es 0 decodifico la letra buscando en el alfabeto 1
  140.                 for(k=0;*(alf1+k)!='\0';k++)
  141.                 {
  142.                    if(*(text+i)==*(alf1+k))
  143.                       {
  144.                         *(text+i)=*(alfabeto+k);
  145.                         break;
  146.                       }
  147.                      
  148.                 }
  149.                 break;
  150.            case 2: //si el modulo es 0 decodifico la letra buscando en el alfabeto 2
  151.                 for(k=0;*(alf2+k)!='\0';k++)
  152.                 {
  153.                    if(*(text+i)==*(alf2+k))
  154.                       {
  155.                         *(text+i)=*(alfabeto+k);
  156.                         break;  
  157.                       }
  158.                        
  159.                 }
  160.                 break;
  161.            case 3: //si el modulo es 0 decodifico la letra buscando en el alfabeto 3
  162.                 for(k=0;*(alf3+k)!='\0';k++)
  163.                 {
  164.                    if(*(text+i)==*(alf3+k))
  165.                       {
  166.                         *(text+i)=*(alfabeto+k);
  167.                         break;
  168.                       }
  169.                        
  170.                 }
  171.                 break;
  172.            case 4: //si el modulo es 0 decodifico la letra buscando en el alfabeto 4
  173.                 for(k=0;*(alf4+k)!='\0';k++)
  174.                 {
  175.                    if(*(text+i)==*(alf4+k))
  176.                       {
  177.                         *(text+i)=*(alfabeto+k);  
  178.                         break;
  179.                       }
  180.                        
  181.                 }
  182.           }
  183.      }
  184. }
  185.  
« Última modificación: Febrero 08, 2014, 06:12:18 pm por Expermicid »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login



Desconectado S[e]C

  • *
  • Underc0der
  • Mensajes: 42
  • Actividad:
    0%
  • Reputación 0
  • I am mine.
    • Ver Perfil
    • Undersecurity
« Respuesta #1 en: Marzo 31, 2010, 05:04:09 pm »
You are not allowed to view links. Register or Login
Buen aporte men! pero me pregunto..esto es para que en general?  ???

Dices el porque de cifrar los mensajes ? o a que te refieres especificamente?
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login



Desconectado OSI

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Junio 25, 2010, 10:26:08 am »
de 10 el code , prefiero mi encriptacion tiene menos lio y es mas potente (?)
S4lut3s

Desconectado rabulu

  • *
  • Underc0der
  • Mensajes: 86
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #3 en: Junio 25, 2010, 12:49:52 pm »
pues quisiera opinar pero no entiendo de que se trata ::)

 

¿Te gustó el post? COMPARTILO!



[C] Simple Implementacion del cifrado Julio César

Iniciado por S[e]C

Respuestas: 0
Vistas: 1548
Último mensaje Abril 01, 2010, 09:35:14 pm
por S[e]C
[Code] GetThreadTEB

Iniciado por Arkangel

Respuestas: 0
Vistas: 1394
Último mensaje Junio 17, 2013, 08:58:55 am
por Arkangel