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.ciphername
où ciphername
est le nom du chiffrement qui sera
passé à mcrypt_module_open(). Les cinq paramètres
suivants sont aussi disponibles :
Paramètre | Obligatoire | Par défaut | Valeurs possibles |
---|---|---|---|
mode | Optionnel | cbc | cbc, cfb, ecb, nofb, ofb, stream |
algorithms_dir | Optionnel | ini_get('mcrypt.algorithms_dir') | Chemin vers les algorithmes de modules |
modes_dir | Optionnel | ini_get('mcrypt.modes_dir') | Chemin vers les modes de modules |
iv | Obligatoire | N/A | Généralement 8, 16 ou 32 octets de données binaires. Dépend du chiffrement |
key | Obligatoire | N/A | Généralement 8, 16 ou 32 octets de données binaires. Dépend du chiffrement |
Exemple #1 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('secret-file.enc', 'wb');
stream_filter_append($fp, 'mcrypt.tripledes', STREAM_FILTER_WRITE, $opts);
fwrite($fp, 'Secret secret secret data');
fclose($fp);
?>
Exemple #2 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('secret-file.enc', 'rb');
stream_filter_append($fp, 'mdecrypt.tripledes', STREAM_FILTER_READ, $opts);
$data = rtrim(stream_get_contents($fp));
fclose($fp);
echo $data;
?>