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
  • 1819 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.

No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: No tienes permisos para ver links. Registrate o Entra con tu cuenta - No tienes permisos para ver links. Registrate o Entra con tu cuenta - No tienes permisos para ver links. Registrate o Entra con tu cuenta

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.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout,"Cadena a cifrar\t:");
  31.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdin,"%s",cad);
  32.     cifra(cad);    //primera pasada
  33.     cifra(cad);    //segunda pasada
  34.     No tienes permisos para ver links. Registrate o Entra con tu cuenta("Cadena codificada\t:%s\n",cad);
  35.     descifra(cad); //revierte primera pasada
  36.     descifra(cad); //revierte segunda pasada
  37.     No tienes permisos para ver links. Registrate o Entra con tu cuenta("\nCadena decodificada\t:%s\n",cad);
  38.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdin,NULL);
  39.     No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  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 »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta



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 »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
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?
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta



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: 1670
Último mensaje Abril 01, 2010, 09:35:14 pm
por S[e]C
[Code] GetThreadTEB

Iniciado por Arkangel

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