Crypter et decrypter un fichier

Soyez le premier à donner votre avis sur cette source.

Vue 56 780 fois - Téléchargée 2 038 fois

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 / Exemple :


<?
///////(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é.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Bonjour, ce script est encore valable
Bonjour,
Je récupère donc la taille de ma clé:

$taille = strlen( $chaine_crypt )  * 8 ;


Merci d'avoir pris le temps ...
Messages postés
14787
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 avril 2021
154
Il s'agit ici d'une chaine de caractère, donc ce sera forcément un multiple de 8 bits.
Merci,
Si je comprend la valeur en bit de ma clé correspond à la "valeur" de mon cryptage.
Si ma clé de cryptage est 1578 en décimal (11000101010 en binaire) cela équivaut à une clé 11 bit.
Messages postés
14787
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 avril 2021
154
Il s'agit d'un chiffrement de type XOR, la clé est de taille variable.
Afficher les 23 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.