J'ai trouvé ce code sur Internet qui correspond tout à fait à ce que je cherche :
function crypte_fichier($file,$code,$file_crypted){
$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($code)); $i++) $lignecripte.= $code;
//ouvre le fichier a crypter en lecture
//cree le nouveau fichier
if (file_exists($file)){//verifie presence du fichier
chmod($file,0777);//attribue tous droits
$ancien = fopen($file, "rb");
$nouveau = fopen($file_crypted, "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($file);//suprimme l'ancien fichier
}}
function telecharge($nomfichier,$file_crypted){
//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($file_crypted));
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
}
function decrypte_file($file_crypted,$code){
$bytes = 65536; //bite par ligne
$lignecripte="";
$chainecrypte=$code;
//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($file, "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;
}
}
Donc la première fonction encrypte le fichier (utilisé après l'upload) et le déplace dans le dossier de mon choix, la seconde déclare les headers pour forcer le téléchargement et la troisième le décrypte et lance le téléchargement (en fait il faut lancer la seconde fonction juste avant la troisième).Là où l'encryptage se fait bien (impossible de lire le fichier après encryptage), le décryptage se fait mal : le fichier téléchargé est illisible (testé avec des images png).
Les variables :
$file : chemin du fichier non crypté
$file_encrypted : chemin du fichier crypté
$code : clé de cryptage
$nomfichier : nom du fichier (que j'obtiens avec un bête basename() ).
Je demande votre aide vu que je ne m'y connais pas du tout en cryptologie, je débute un peu en php et ce genre de manipulation avec les bits toussa c'est pas mon truc. Merci de l'aide