Foros del Web » Programando para Internet » PHP »

Encriptar archivos antes de subirlos al servidor

Estas en el tema de Encriptar archivos antes de subirlos al servidor en el foro de PHP en Foros del Web. Hola, existe alguna forma de encriptar archivos antes de subirlos al servidor? con php o si se puede hacer con otro lenguaje de programacion, cual ...
  #1 (permalink)  
Antiguo 14/01/2013, 22:47
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 12 años, 7 meses
Puntos: 18
Encriptar archivos antes de subirlos al servidor

Hola, existe alguna forma de encriptar archivos antes de subirlos al servidor? con php o si se puede hacer con otro lenguaje de programacion, cual seria? Muchas gracias a quienes me puedan aclarar mis dudas!
  #2 (permalink)  
Antiguo 14/01/2013, 22:56
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Encriptar archivos antes de subirlos al servidor

Hola que tal.

y para que fines deseas guardar archivos encriptados, o que tipo de archivos quieres encripatar puedes explicar un poco más.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 14/01/2013, 23:04
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: Encriptar archivos antes de subirlos al servidor

Hola :D, bueno en realidad es por que veo poco seguro guardar archivos en el servidor que sean subidos por el usuario y que estos esten igual como los subio (cambiando el nombre claro), ya que me han dicho que aveces pueden subir archivos que pueden ejecutar sentencias y dañar codigos del sitio o dañar el mismo sitio web, y la cosa es que se puede subir cualquier tipo de archivo. es por eso mi pregunta!, Gracias y bueno con tu respuesta veo que si es posible entonces subir archivos encriptados al servidor
  #4 (permalink)  
Antiguo 14/01/2013, 23:19
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Encriptar archivos antes de subirlos al servidor

Cita:
Iniciado por edward18_1 Ver Mensaje
Gracias y bueno con tu respuesta veo que si es posible entonces subir archivos encriptados al servidor
La verdad no lo he echo y desconozco si se pueda pero la pregunta sería y ¿Por que dices que pueden afectar al servidor?

Recuerda que un archivo no se puede ejecutar por si solo, ya que debe de haber un proceso especifico en el sistema operativo para poder abrirlo o solo que lo leas con el lenguaje del lado del servidor solo de esa forma puedes leer o ejecutar el contenido del archivo.

Lo que te recomiendo es que tengas una buena validación al momento de subir los documentos al servidor, de esa forma podrás evitar algún tipo de bug en tu sistema.

Saludos.
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #5 (permalink)  
Antiguo 15/01/2013, 00:02
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Encriptar archivos antes de subirlos al servidor

Buenas!

Como poder encriptar supongo que se puede...

Solo tendrías que obtener el contenido del fichero y aplicarle una función de encriptación.

El problema es que si aplicas una función de encriptación irreversible (se que tiene un nombre específico, pero no me acuerdo y siempre los confundo!) como SHA1, SHA256, etc no podrás recuperar el contenido original a no ser que lo guardes en otro lado (con lo que te quedas en las mismas).

Por tanto, tendrías que aplicar un algoritmo que fuera reversible (como base64, o aplicar alguno que inventes tú; yo cuando estudiaba informática tuve una práctica basada en el método BIGENERE); entonces a la hora de ejecutar tendrías que deshacer el algoritmo y ejecutar... y luego volver a encriptar.

Por si te pica la curiosidad del BIGENERE "modificado" que hicimos, se basa en lo siguiente:

Código:
 - Tenemos la entrada que queremos encriptar (E)
 - Tenemos un pass privado generado por nosotros (P)

Entonces, obtenemos una longitud L tal que:

Si longitud(E)>longitud(P), L=longitud(E)
Si longitud(E)<longitud(P), L=longitud(P)

Ahora, hacemos un bucle de i=0 hasta L, y en cada iteración, hacemos:

- Obtenemos el valor ASCII del caracter i de E y le sumamos (o restamos) el valor ASCII del caracter i de P. (X)

 - Operamos X para que quede dentro del rango de caracteres visibles (de 33 a 127) [opcional]

 - Obtenemos el caracter correspondiente a X

 - Lo añadimos a un String.

**Cabe destacar que si llegamos al final de una cadena (E, o P), debemos volver al inicio de la misa
Para ponerte un ejemplo:

Input: 01234
Pass: 543210

L = 5
ASCII(0) = 48
[formato X: (ASCII, I + P)
X= (101; "0"+"5"), (101; "1"+"4"), (101, "2" + "3"), (101, "3" + "2"), (101, "4" + "1"), (95, "0" + "0") => eeee_

Para desencriptar has de hacer el proceso inverso...

Si quieres te puedo pasar el código en C o en PHP...

Espero que te ayude,

Saludos!
  #6 (permalink)  
Antiguo 15/01/2013, 18:08
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: Encriptar archivos antes de subirlos al servidor

Cita:
Iniciado por DoHITB Ver Mensaje
Buenas!

Como poder encriptar supongo que se puede...

Solo tendrías que obtener el contenido del fichero y aplicarle una función de encriptación.

El problema es que si aplicas una función de encriptación irreversible (se que tiene un nombre específico, pero no me acuerdo y siempre los confundo!) como SHA1, SHA256, etc no podrás recuperar el contenido original a no ser que lo guardes en otro lado (con lo que te quedas en las mismas).

Por tanto, tendrías que aplicar un algoritmo que fuera reversible (como base64, o aplicar alguno que inventes tú; yo cuando estudiaba informática tuve una práctica basada en el método BIGENERE); entonces a la hora de ejecutar tendrías que deshacer el algoritmo y ejecutar... y luego volver a encriptar.

Por si te pica la curiosidad del BIGENERE "modificado" que hicimos, se basa en lo siguiente:

Código:
 - Tenemos la entrada que queremos encriptar (E)
 - Tenemos un pass privado generado por nosotros (P)

Entonces, obtenemos una longitud L tal que:

Si longitud(E)>longitud(P), L=longitud(E)
Si longitud(E)<longitud(P), L=longitud(P)

Ahora, hacemos un bucle de i=0 hasta L, y en cada iteración, hacemos:

- Obtenemos el valor ASCII del caracter i de E y le sumamos (o restamos) el valor ASCII del caracter i de P. (X)

 - Operamos X para que quede dentro del rango de caracteres visibles (de 33 a 127) [opcional]

 - Obtenemos el caracter correspondiente a X

 - Lo añadimos a un String.

**Cabe destacar que si llegamos al final de una cadena (E, o P), debemos volver al inicio de la misa
Para ponerte un ejemplo:

Input: 01234
Pass: 543210

L = 5
ASCII(0) = 48
[formato X: (ASCII, I + P)
X= (101; "0"+"5"), (101; "1"+"4"), (101, "2" + "3"), (101, "3" + "2"), (101, "4" + "1"), (95, "0" + "0") => eeee_

Para desencriptar has de hacer el proceso inverso...

Si quieres te puedo pasar el código en C o en PHP...

Espero que te ayude,

Saludos!
Compañero, muchas gracias, si le agradeceria mucho si me pasa el codigo! a ver que tal funciona y por lo que veo si me ayudaria mucho en php, y bueno respondiendo a la pregunta del compañero skiper0125 ¿Por que dices que pueden afectar al servidor?, Como te dije un colega me dijo eso que puede afectarlo y usted sabe que uno siempre sea como sea debe indagar para que la proxima vez no nos tomen desinformados, como por ejemplo si usted sabe que la luna no esta hecha de hierro! y yo le digo que si lo esta. Solo por curiosidad buscaras si la luna contiene hierro o esta hecha de hierro! espero que hayas entendido mi algo loco ejemplo jaja! Gracias :D
  #7 (permalink)  
Antiguo 16/01/2013, 00:46
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
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!
  #8 (permalink)  
Antiguo 16/01/2013, 00:48
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Encriptar archivos antes de subirlos al servidor

Con php no vas a poder encriptar nada que sea antes de subirlo al servidor, porque php corre en el servidor y no en el cliente, por lo tanto hasta no estar en el servidor con php no podrás hacer nada.
Podrías usar php si los archivos ya están en el servidor.

Etiquetas: encriptar, servidor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:09.