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 :
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
;
?>