Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPTER ET DECRYPTER UN FICHIER


Information sur la source

Catégorie :Fichier / Disque Niveau : Expert Date de création : 05/02/2004 Vu / téléchargé: 31 005 / 900

Note :
8,11 / 10 - par 9 personnes
8,11 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

J'ai cree ce code  pour permettre de crypter un fichier k'il soit ZIP RAR MP3 ou etc.....
tres utiles lorsque que l'on veut pas ke les utilisateurs puissent telecharger des fichiers sans passer par nos script ,c'est adire que meme si il connait le repertoire ou se trouve votre fichier et k'il le recupere il poura rien en faire
alors avec se script vous pourez crypter vos fichier.

Sur votre page de telechrgement pour chaque fichier mettez un lien vers un fichier du style telechargement.php et dans ce fichier mettez y les fonction telecharge et
decrypte_file
recuperer l'adresse du fichier a telecharger passer la en parametre de la fonction.

lorsque l'utilisateur cliquera sur le lien une boite de dialogue lui proposant de telecharger le fichier s'affichera voila.

//////////////////////////////////////////////////////////////////////////////////////////////
- Ayant toute mes données dans une table fichier c'est a dire que lorsque je crypte un fichier j'enregistre juste son nom dans un champ de ma table ensuite son adresse dans un autre champ et un nom temporaire dans un autre champs ainsi qua la cle cryptage
champ table FICHIER:

id_fichier ==>generer automatique
nom_fichier ==>juste le nom du fichier origine
adresse_fichier ==>toute l'adresse mais juste l'adresse le repertoire ou il se trouve un truc du style $_SERVER['DOCUMENT_ROOT']."/fichier_download/"
nom_temp ==>un nom que je cree aleatoirement c'est le nom que aura mon fichier une fois crypter et se trouvera ainsi dans le meme repertoire que mon fichier origine
cle_crypt==>la cle qui me sert au cryptage de mon fichier


voila comme sa quand j'affiche mais fichier sur ma page de telechargement je leur mais comme lien:
<a href="telechargement.php?id=<? echo $file['id_fichier']?>>                            <?echo $file['nom_fichier']?>
</a>

voila ensuite dans ma page de telechargement je recupere les infos dans matable fichier
et je passe en parametre de ma fonction telecharge($file['nom_fichier'],$file['adresse_fichier'].$file['nom_temp'])

ensuite je decrypte le fichier avec la fonction decrypte_file($file['adresse_ficier'].$file['nom_temp'],$file['cle_crypt'])

et voila si tous se passe bien une boite s'affiche "telecharger le fichier"  exactement comme si on fesait un lien direct vers le fichier du style <a href=fichier.zip >


 

Source

  • <?
  • ///////(c) Musco93200 ////////
  • // cryptage de fichier
  • // le 5 fevrier a 5:14
  • ///////////////////////////////
  • //~~~~Crypte le fichier
  • function crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier){
  • $lignecripte="";
  • $bytes = 65536;//nombre de bytes par ligne de cryptage
  • //remplit une ligne de cryptage de longueur 65536 bites
  • for ($i = 0; $i <= floor($bytes/strlen($chaine_crypt)); $i++) $lignecripte.= $chaine_crypt;
  • //ouvre le fichier a crypter en lecture
  • //cree le nouveau fichier
  • if (file_exists($chemin_fichier)){//verifie presence du fichier
  • chmod($chemin_fichier,0777);//attribue tous droits
  • $ancien = fopen($chemin_fichier, "rb");
  • $nouveau = fopen($chemin1_fichier, "wb");
  • // crypt le fichier et ecrie dans le nouveau fichier par ligne de 65536 bites
  • while($line = fread($ancien, $bytes)){
  • $line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011s^ 10110=00101
  • fputs($nouveau, $line2);}
  • // ferme les fichiers
  • fclose($ancien);fclose($nouveau);
  • unlink($chemin_fichier);//suprimme l'ancien fichier
  • }}
  • //~~~~declare les entetes de fichier~~~~//
  • function telecharge($nomfichier,$chemin1_fichier){
  • //entete de header precise au navigateur l'envoi d'un fichier
  • header("Content-disposition: attachment; filename=$nomfichier");
  • header("Content-Type: application/force-download");
  • header("Content-Transfer-Encoding: binary");
  • header("Content-Length: ".filesize($chemin1_fichier));
  • header("Pragma: no-cache");
  • header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
  • header("Expires: 0");
  • }
  • //~~~~Decrypte le fichier~~~~//
  • //fonction a appler apres avoir declarer les header ouvrira une boite de telechargement
  • function decrypte_file($chemin1_fichier,$chaine_crypt){
  • $bytes = 65536; //bite par ligne
  • $lignecripte="";
  • $chainecrypte=$chaine_crypt;
  • //remplit une ligne de cryptage de longueur 65536 bites
  • for ($i = 0; $i <= floor($bytes/strlen($chainecrypte)); $i++) $lignecripte.= $chainecrypte;
  • // ouvre le fichier
  • $file = fopen($chemin_fichier, "rb");
  • while($line = fread($file, $bytes)){
  • $line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011s^ 10110=00101
  • // affichage du fichier
  • echo $line2;
  • }
  • }
  • ///~~~~~progrmamme ~~~~~~~////
  • $chemin_fichier="adresse comple de votre fichier"
  • $chemin_fichier=$_SERVER['DOCUMENT_ROOT']."/fichier1.zip" //adresse fichier origine se trouvant sur la racine de votre serveur
  • $chaine_crypt="MUSCO93200"//n'importe kel chaine
  • $chemin1_fichier=$_SERVER['DOCUMENT_ROOT']."/rep_crypt/fichier1.zip" //adresse fichier crypter
  • $nom_fichier="fichier1.zip"//nom du fichier a afficher ldans la boite de telechargement fichier
  • //crypte le fichier "fichier1.zip" avec la cle "musco93200" et l'enregistre
  • //dans le repertoire "/rep_crypt/" et ensuite suprime le fichier origine
  • crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier);
  • //declare les header pour dire a la page ke c'est un fichier a telecharger methode de force de telechargement
  • telecharge($nomfichier,$chemin1_fichier);
  • //decrypt le fichier "fichier1.zip" qui se trouve dans le repertoire "/rep_crypt/"
  • decrypte_file($chemin1_fichier,$chaine_crypt)
  • ?>
<?
///////(c) Musco93200 ////////
//    cryptage de fichier
//    le 5 fevrier a 5:14
///////////////////////////////

//~~~~Crypte le fichier
function crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier){
  $lignecripte="";
  $bytes = 65536;//nombre de bytes par ligne de cryptage
  //remplit une ligne de cryptage de longueur 65536 bites
  for ($i = 0; $i <= floor($bytes/strlen($chaine_crypt)); $i++) $lignecripte.= $chaine_crypt;
  //ouvre le fichier a crypter en lecture
  //cree le nouveau fichier
 if (file_exists($chemin_fichier)){//verifie presence du fichier
  chmod($chemin_fichier,0777);//attribue tous droits
  $ancien = fopen($chemin_fichier, "rb");
  $nouveau = fopen($chemin1_fichier, "wb");
  // crypt le fichier et ecrie dans le nouveau fichier par ligne de 65536 bites
  while($line = fread($ancien, $bytes)){
    $line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011s^ 10110=00101 
    fputs($nouveau, $line2);}
  // ferme les fichiers
  fclose($ancien);fclose($nouveau);
  unlink($chemin_fichier);//suprimme l'ancien fichier
}}

//~~~~declare les entetes de fichier~~~~//
function telecharge($nomfichier,$chemin1_fichier){
	//entete de header precise au navigateur l'envoi d'un fichier
	header("Content-disposition: attachment; filename=$nomfichier");
	header("Content-Type: application/force-download");
	header("Content-Transfer-Encoding: binary");
	header("Content-Length: ".filesize($chemin1_fichier));
	header("Pragma: no-cache");
	header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
	header("Expires: 0");
}

//~~~~Decrypte le fichier~~~~//
//fonction a appler apres avoir declarer les header ouvrira une boite de telechargement
function decrypte_file($chemin1_fichier,$chaine_crypt){
	$bytes = 65536; //bite par ligne
	$lignecripte="";
	$chainecrypte=$chaine_crypt;
	//remplit une ligne de cryptage de longueur 65536 bites
	for ($i = 0; $i <= floor($bytes/strlen($chainecrypte)); $i++) $lignecripte.= $chainecrypte;
  	// ouvre le fichier
  	$file = fopen($chemin_fichier, "rb");
  	while($line = fread($file, $bytes)){
    	$line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011s^ 10110=00101 
    	// affichage du fichier
    	echo $line2;
  	}
}

///~~~~~progrmamme ~~~~~~~////
$chemin_fichier="adresse comple de votre fichier"
$chemin_fichier=$_SERVER['DOCUMENT_ROOT']."/fichier1.zip" //adresse fichier origine se trouvant sur la racine de votre serveur
$chaine_crypt="MUSCO93200"//n'importe kel chaine
$chemin1_fichier=$_SERVER['DOCUMENT_ROOT']."/rep_crypt/fichier1.zip" //adresse fichier crypter
$nom_fichier="fichier1.zip"//nom du fichier a afficher ldans la boite de telechargement fichier

//crypte le fichier "fichier1.zip" avec la cle "musco93200" et l'enregistre 
//dans le repertoire "/rep_crypt/" et ensuite suprime le fichier origine
crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier);

//declare les header pour dire a la page ke c'est un fichier a telecharger methode de force de telechargement
telecharge($nomfichier,$chemin1_fichier);

//decrypt le fichier "fichier1.zip" qui se trouve dans le repertoire "/rep_crypt/"
decrypte_file($chemin1_fichier,$chaine_crypt)

?>

Conclusion

Faite moi part de vos impression et si vou sne comprenez pas tou et que vou s voulez de l'aide pas de probleme laissez moi des messages .
voila la il est 5h50 et j'ai pas dormie alors bonne nuit et peut etre a demain pour les interessé.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de willinfeo le 06/02/2004 12:52:18

Salut,
Ton script a l'air super interressant, j'ai pas eu le temps de regarder en détail.
Aurais-tu une astuce pour crypter un javascript à insérer dans une page.
Merci

signaler à un administrateur
Commentaire de Kirua le 06/02/2004 17:56:33

le javascript, par définition pusique c un langage client, est tjs présent sur le site du visiteur, tu peux pas faire autrement, par contre tu peux encoder le script avec urlencode de php. tu peux aussi utiliser document.write( fonction(scriptencodé)  );

et la fonction je sais plus ce que c, autant dire que mon msg est inutile mdr, dsl :-P mais comme ça tu sais que ça existe, ça brouille le script, il est pas lisible, donc faudra qq un qui comprend un peu le principe pr qu'il puisse te le piquer. ça fait passer là sécurité de 0/100 à 1/100 quoi

signaler à un administrateur
Commentaire de thetrasher le 26/03/2004 17:17:27

Parse error: parse error in /chemin/crypterfichier.php on line 59

chemin cété lrl ou il été ;,

je fé cmt ?

signaler à un administrateur
Commentaire de neomaster0084 le 27/06/2004 05:17:52

Parse error: parse error in /chemin/crypterfichier.php on line 59

chemin cété lrl ou il été ;,

je fé cmt ?
----------------------------
Commente les lignes a partir de 59. Elles sont uniquement la a titre d'example.

Ou ajoute ; a la fin de la ligne , tu ne verra plus le message.


Très bien ce script

signaler à un administrateur
Commentaire de gooopil le 19/07/2004 19:30:37

Très bien, oui et non...

Certes ca marche, mais ne vaut-il pas mieux carrément refuser l'accès au fichier plutot que de le crypter, et ce afin d'économiser de la bande passante ?

signaler à un administrateur
Commentaire de gergalp le 09/10/2004 11:28:31

ca dépend si on veut que seulement certaines personnes aient accès au fichier ou personne, si personne ne doit avoir acces au fichier, forcémént, ca sert à rien de le mettre sur un serveur. sinon, c'est vrai qu'on peut protéger un dossier par htpasswd, mais un mot de passes, c'est vite perdu si on fait pas vraiment attention, sans compter les failles éventuelles sur le serveur.

signaler à un administrateur
Commentaire de sd47dev le 16/10/2004 11:22:34

bonjour,
Intéressant comme outil mais quelque chose me tracasse. Prenons un fichier comportement à plusieurs reprises de très longues suites de caractères identiques (plus longues que la clef), un fichier word banal ne comportant que deux mots fera l'affaire, au vu de ce qui est généré par le format.  

Et bien l'opération xor produit forcément plusieurs fois le même résultat, à savoir la clef. Donc la clef est récupérable dans le fichier crypté, avec un peu d'effort certes, d'autant plus si la clef est longue, mais récupérable... Et pour peu que la fonction de décryptage soit connue (il faut tomber sur la bonne mais beaucoup se ressemblent, et via un peu de patience...) aïe pour la sécurité.

J'avoue c'est du travail mais ne pourrait-on pas imaginer, au lieu de reproduire le schema de la clef en plusieurs fois, la différencier selon un algorithme secret à chaque tour de boucle construisant $lignecripte.

Je ne sais pas si j'ai été assez clair mais si quelqu'un a des idées... je suis toute ouie.

merci

signaler à un administrateur
Commentaire de MATHIS49 le 03/06/2005 02:30:45

J'adore je vote 10 sur 10 !

Seul truc j'ai pas trop compris la fonction 'telecharge', a quoi ca sert exactement, et comment ca marche ce systeme de header?

MErci encore !

signaler à un administrateur
Commentaire de MATHIS49 le 03/06/2005 19:19:10

Bon voila ce script corrigé car yavais plein d'erreur de maladresse (du je pense a la fatigue) :

le script corrigé  :

<?
///////(c) Musco93200 ////////
//    cryptage de fichier
//    le 5 fevrier a 5:14
///////////////////////////////

//~~~~Crypte le fichier
function crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier){
  $lignecripte="";
  $bytes = 65536;//nombre de bytes par ligne de cryptage
  //remplit une ligne de cryptage de longueur 65536 bites
  for ($i = 0; $i <= floor($bytes/strlen($chaine_crypt)); $i++) $lignecripte.= $chaine_crypt;
  //ouvre le fichier a crypter en lecture
  //cree le nouveau fichier
if (file_exists($chemin_fichier)){//verifie presence du fichier
  chmod($chemin_fichier,0777);//attribue tous droits
  $ancien = fopen($chemin_fichier, "rb");
  $nouveau = fopen($chemin1_fichier, "wb");
  // crypt le fichier et ecrie dans le nouveau fichier par ligne de 65536 bites
  while($line = fread($ancien, $bytes)){
    $line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011¨^ 10110=00101
    fputs($nouveau, $line2);}
  // ferme les fichiers
  fclose($ancien);fclose($nouveau);
  unlink($chemin_fichier);//suprimme l'ancien fichier
}}

//~~~~declare les entetes de fichier~~~~//
function telecharge($nomfichier,$chemin1_fichier){
//entete de header precise au navigateur l'envoi d'un fichier
header("Content-disposition: attachment; filename=$nomfichier");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($chemin1_fichier));
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
}

//~~~~Decrypte le fichier~~~~//
//fonction a appler apres avoir declarer les header ouvrira une boite de telechargement
function decrypte_file($chemin1_fichier,$chaine_crypt){
$bytes = 65536; //bite par ligne
$lignecripte="";
$chainecrypte=$chaine_crypt;
//remplit une ligne de cryptage de longueur 65536 bites
for ($i = 0; $i <= floor($bytes/strlen($chainecrypte)); $i++) $lignecripte.= $chainecrypte;
   // ouvre le fichier
   $file = fopen($chemin1_fichier, "rb");
   while($line = fread($file, $bytes)){
     $line2 = $line ^ $lignecripte;//effectue un OU EXCLUSIF (XOR) sur les bits 10011¨^ 10110=00101
     // affichage du fichier
     echo $line2;
   }
}

///~~~~~progrmamme ~~~~~~~////
$chemin_fichier="adresse comple de votre fichier";
$chemin_fichier="dessin.jpg"; //adresse fichier origine se trouvant sur la racine de votre serveur
$chaine_crypt="MUSCO93200";//n'importe kel chaine
$chemin1_fichier="./crypter/dessin.jpg"; //adresse fichier crypter
$nom_fichier="dessin.jpg";//nom du fichier a afficher ldans la boite de telechargement fichier

//crypte le fichier "fichier1.zip" avec la cle "musco93200" et l'enregistre
//dans le repertoire "/rep_crypt/" et ensuite suprime le fichier origine
crypte_fichier($chemin_fichier,$chaine_crypt,$chemin1_fichier);

//declare les header pour dire a la page ke c'est un fichier a telecharger methode de force de telechargement
telecharge($nom_fichier,$chemin1_fichier);

//decrypt le fichier "fichier1.zip" qui se trouve dans le repertoire "/rep_crypt/"
decrypte_file($chemin1_fichier,$chaine_crypt);

?>

signaler à un administrateur
Commentaire de iamalami28 le 27/01/2006 12:03:55

bjr ts le monde , j'ai besoin d'un scripte en php qui permet d'interdir le telechargement des fichiers d'un site. merci

signaler à un administrateur
Commentaire de Kirua le 27/01/2006 13:28:57

10 000 euros, de rien.

signaler à un administrateur
Commentaire de genie_vaw le 15/05/2007 13:02:09

bonjour :) ,
bah pour mon cas , j'ai une page en php , je veux crypté le code source pour qu'il soint illisible et en mm temp soit executable au niveau de serveur , mais le grand problème c que j'ai trouvé que la fonction de cryptage soit lisible .
le question : c comment rendre mon code source illisible ?.
le prkoi : parce que supposant que le serveur est attaqué , le cryptage va sécuisé le code source et les fichiers aussi .

merci .

signaler à un administrateur
Commentaire de gergalp le 16/05/2007 14:42:29

si ton serveur est attaqué, l'hypothétique pirate prendra aussi la clé et l'algo...

sans compter que le déchiffrement de tes fichier augmentera la charge de ton serveur...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.