Ver Mensaje Individual
  #7 (permalink)  
Antiguo 16/01/2013, 00:46
DoHITB
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Encriptar archivos antes de subirlos al servidor

Hola!

No he encontrado que hiciera (yo) ninguna función así en PHP... así que te paso el src del programa que hice hace ya 4 años con C (no te será dificil ni optimizarlo ni pasarlo a PHP...). Este mismo podrías compilarlo e incluso llamar al exe desde PHP...

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. int main (void)
  7. {
  8.   char abecedario[27] = {"ABCÇDEFGHIJKLMNOPQRSTUVWXYZ"};
  9.   char pass[100];
  10.   char cifrar[100];
  11.   int opcion, indexAbc, indexPass, indexCifrar, valorLetra, valorAux, posicionValores1, posicionValores2, largoPass2;
  12.   int valoresCifrar[100], valoresPass[100], valoresTrans[100];
  13.   int largoCifrar, largoPass, aviso, rep, deMas, subTot, aux, aux2, punto, aux3;
  14.   int totales[100],indexTotales,valor,total;
  15.  
  16.   abecedario[3]=128;
  17.   valorLetra = 0;
  18.   posicionValores1 = 0;
  19.   aviso = 0;
  20.   posicionValores2 = 0;
  21.   valorAux = 0;
  22.   indexTotales = 0;
  23.  
  24.   printf("Elige una opcion:\n1. Cifrar\n2. Descifrar\n\n");
  25.   scanf("%i",&opcion);
  26.   fflush(stdin);
  27.  
  28.   while((opcion!=1)&&(opcion!=2)){
  29.     if(opcion!=1){
  30.       printf("Numero incorrecto... Elige una opcion\n1. Cifrar\n2. Descifrar\n\n");
  31.       scanf("%i",opcion);
  32.       fflush(stdin);
  33.     }else if(opcion!=2){
  34.       printf("Numero incorrecto... Elige una opcion\n1. Cifrar\n2. Descifrar\n\n");
  35.       scanf("%i",opcion);
  36.       fflush(stdin);
  37.     }
  38.   }
  39.  
  40.   if(opcion==1){
  41.    printf("\nEscribe el texto a cifrar: ");
  42.    gets(cifrar);
  43.    fflush(stdin);
  44.    printf("Escribe el pass: ");
  45.    gets(pass);
  46.    fflush(stdin);
  47.  
  48.    largoCifrar=strlen(cifrar);
  49.    largoPass=strlen(pass);
  50.  
  51.    if(largoCifrar>largoPass){
  52.      rep=largoCifrar/largoPass;
  53.      subTot=largoPass*rep;
  54.      deMas=largoCifrar%largoPass;
  55.      largoPass2=subTot+deMas;
  56.    }else if(largoCifrar<largoPass){
  57.      largoPass2=largoCifrar;    
  58.    }else if(largoCifrar==largoPass){
  59.      largoPass2=largoPass;    
  60.    }
  61.  
  62.    for(indexCifrar=0;indexCifrar<largoCifrar;indexCifrar++){
  63.      valorLetra=0;
  64.      aviso=0;
  65.      indexAbc=0;
  66.      
  67.      while(indexAbc<27&&(aviso==0)){
  68.        if(abecedario[indexAbc]==cifrar[indexCifrar]){
  69.          valoresCifrar[posicionValores1]=indexAbc;    
  70.          aviso=1;                                      
  71.        }          
  72.  
  73.        indexAbc++;
  74.      }
  75.  
  76.      posicionValores1++;                                                        
  77.    }
  78.    
  79.    aviso=0;
  80.    
  81.    for(indexPass=0;indexPass<largoPass2;indexPass++){
  82.      valorAux=0;
  83.      aviso=0;
  84.      indexAbc=0;
  85.    
  86.      while((indexAbc<27)&&(aviso==0)){
  87.        if(abecedario[indexAbc]==pass[indexPass]){
  88.          valoresPass[posicionValores2]=indexAbc;  
  89.          aviso=1;                                      
  90.        }                  
  91.  
  92.        indexAbc++;                                  
  93.      }
  94.  
  95.      posicionValores2++;
  96.    }
  97.    
  98.    punto=posicionValores2-largoPass;
  99.    
  100.    for(aux=0;aux<largoPass;aux++){
  101.      valoresTrans[aux]=valoresPass[aux];                                    
  102.    }
  103.    
  104.    aux2=0;
  105.    aux=largoPass;
  106.    aux3=0;
  107.  
  108.    for(aux2=0;aux2<punto;aux2++){
  109.      valoresPass[aux]=valoresTrans[aux3];
  110.      if(aux3==largoPass-1){
  111.        aux3=-1;                  
  112.      }        
  113.  
  114.      aux3++;
  115.      aux++;      
  116.    }
  117.    
  118.    printf("\n");
  119.    
  120.    for(indexPass=0;indexPass<largoCifrar;indexPass++){
  121.       totales[indexTotales]=(valoresCifrar[indexPass]+valoresPass[indexPass])%27;
  122.       printf("%c",abecedario[totales[indexTotales]]);
  123.       indexTotales++;                                    
  124.    }  
  125.   }
  126.  
  127.   else if(opcion==2){
  128.     printf("\nEscribe el texto cifrado: ");
  129.     gets(cifrar);
  130.     printf("\nEscribe la contrasenya: ");
  131.     gets(pass);
  132.    
  133.     largoCifrar=strlen(cifrar);
  134.     largoPass=strlen(pass);
  135.    
  136.     if(largoCifrar>largoPass){
  137.      rep=largoCifrar/largoPass;
  138.      subTot=largoPass*rep;
  139.      deMas=largoCifrar%largoPass;
  140.      largoPass2=subTot+deMas;
  141.    }else if(largoCifrar<largoPass){
  142.      largoPass2=largoCifrar;    
  143.    }
  144.    
  145.    else if(largoCifrar==largoPass){
  146.      largoPass2=largoPass;    
  147.    }
  148.    
  149.    for(indexCifrar=0;indexCifrar<largoCifrar;indexCifrar++){
  150.      valorLetra=0;
  151.      aviso=0;
  152.      indexAbc=0;
  153.      
  154.      while(indexAbc<27&&(aviso==0)){
  155.        if(abecedario[indexAbc]==cifrar[indexCifrar]){
  156.          valoresCifrar[posicionValores1]=indexAbc;    
  157.          aviso=1;                                      
  158.        }                                  
  159.        indexAbc++;
  160.      }
  161.      posicionValores1++;                                                        
  162.    }
  163.    
  164.    aviso=0;
  165.    
  166.    for(indexPass=0;indexPass<largoPass2;indexPass++){
  167.      valorAux=0;
  168.      aviso=0;
  169.      indexAbc=0;
  170.    
  171.      while((indexAbc<27)&&(aviso==0)){
  172.        if(abecedario[indexAbc]==pass[indexPass]){
  173.          valoresPass[posicionValores2]=indexAbc;  
  174.          aviso=1;                                      
  175.        }                                        
  176.        indexAbc++;                                  
  177.      }
  178.      posicionValores2++;
  179.    }
  180.    
  181.    punto=posicionValores2-largoPass;
  182.    
  183.    for(aux=0;aux<largoPass;aux++){
  184.      valoresTrans[aux]=valoresPass[aux];                                    
  185.    }
  186.    
  187.    aux2=0;
  188.    aux=largoPass;
  189.    aux3=0;
  190.    
  191.    for(aux2=0;aux2<punto;aux2++){
  192.      valoresPass[aux]=valoresTrans[aux3];
  193.      if(aux3==largoPass-1){
  194.        aux3=-1;                  
  195.      }    
  196.  
  197.      aux3++;
  198.      aux++;      
  199.    }
  200.    
  201.    printf("\n");
  202.    
  203.    for(indexPass=0;indexPass<largoCifrar;indexPass++){
  204.      totales[indexTotales]=(valoresCifrar[indexPass]-valoresPass[indexPass]);
  205.      
  206.      if((valoresCifrar[indexPass]-valoresPass[indexPass])<0){
  207.        total=((valoresPass[indexPass]-valoresCifrar[indexPass])+27)%27;
  208.        totales[indexTotales]=27-total;
  209.      }
  210.  
  211.       printf("%c",abecedario[totales[indexTotales]]);
  212.       indexTotales++;                                    
  213.    }      
  214.   }
  215.  
  216.   printf("\n\n\n");
  217.   system("pause");
  218.   system("cls");
  219.   printf("\(C) Powered by DoH");
  220. return 1;
  221. }

Solo decir que de esta práctica saqué un 8 (en primero de CFGS de Desarrollo de Aplicaciones Informáticas)

He tenido que borrar los comentarios del código porque sino no cabía en el mensaje... pero bueno, creo que se puede entender bien!

Saludos!