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 P.1. Paramètres du filtre mcrypt

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 P.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 P.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 ;
?>