Filtres de chiffrement

mcrypt.* et mdecrypt.* fournissent un système de chiffrement symétrique basé sur libmcrypt. Les deux filtres supportent les mêmes algorithmes disponibles avec la bibliothèque mcrypt, sous la forme de la directive mcrypt.ciphernameciphername est le nom du chiffrement qui sera passé à mcrypt_module_open(). Les cinq paramètres suivants sont aussi disponibles :

Tableau M-1. Paramètres du filtre mcrypt

ParamètreObligatoirePar défautValeurs possibles
modeOptionnelcbccbc, cfb, ecb, nofb, ofb, stream
algorithms_dirOptionnelini_get('mcrypt.algorithms_dir')Chemin vers les algorithmes de modules
modes_dirOptionnelini_get('mcrypt.modes_dir')Chemin vers les modes de modules
ivObligatoireN/AGénéralement 8, 16 ou 32 octets de données binaires. Dépend du chiffrement
keyObligatoireN/AGénéralement 8, 16 ou 32 octets de données binaires. Dépend du chiffrement

Exemple M-10. Chiffrement d'un fichier avec 3DES

<?php
$passphrase
= 'My secret';

/* Transforme un mot de passe humain
* en une paire iv/clé
*/
$iv = substr(md5('iv'.$passphrase, true), 0, 8);
$key = substr(md5('pass1'.$passphrase, true) .
               
md5('pass2'.$passphrase, true), 0, 24);
$opts = array('iv'=>$iv, 'key'=>$key);

$fp = fopen('secert-file.enc', 'wb');
stream_filter_append($fp, 'mcrypt.tripledes', STREAM_FILTER_WRITE, $opts);
fwrite($fp, 'Secret secret secret data');
fclose($fp);
?>

Exemple M-11. Lecture d'un fichier chiffré

<?php
$passphrase
= 'My secret';

/* Transforme un mot de passe humain
* en une paire iv/clé
*/
$iv = substr(md5('iv'.$passphrase, true), 0, 8);
$key = substr(md5('pass1'.$passphrase, true) .
               
md5('pass2'.$passphrase, true), 0, 24);
$opts = array('iv'=>$iv, 'key'=>$key);

$fp = fopen('secert-file.enc', 'rb');
stream_filter_append($fp, 'mdecrypt.tripledes', STREAM_FILTER_WRITE, $opts);
$data = rtrim(stream_get_contents($fp));
fclose($fp);

echo
$data;
?>