Filtrele de criptare
mcrypt.* şi mdecrypt.* oferă criptare şi decriptare simetrică, utilizând libmcrypt. Ambele seturi de filtre susţin aceiaşi algoritmi disponibili extensiei mcrypt sub forma mcrypt.ciphername, unde ciphername este denumirea algoritmului de criptare, care ar fi putut fi transmis funcţiei mcrypt_module_open(). De asemenea sunt disponibili şi următorii cinci parametri:
Parametrul | Necesar? | Implicit | Valori-exemple |
---|---|---|---|
mode | Opţional | cbc | cbc, cfb, ecb, nofb, ofb, stream |
algorithms_dir | Opţional | ini_get('mcrypt.algorithms_dir') | Localizarea modulelor algoritmilor |
modes_dir | Opţional | ini_get('mcrypt.modes_dir') | Localizarea modulelor modurilor |
iv | Necesar | nu este | De obicei 8, 16, sau 32 baiţi de date binare. Depinde de cifru |
key | Necesar | nu este | De obicei 8, 16, sau 32 baiţi de date binare. Depinde de cifru |
Example#1 Criptarea conţinutului unui fişier utilizând 3DES
<?php
$passphrase = 'My secret';
/* Transformă parola în text deschis
* într-o pereche iv/key reproductibilă
*/
$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);
?>
Example#2 Citirea unui fiÅŸier criptat
<?php
$passphrase = 'My secret';
/* Transformă parola în text deschis
* într-o pereche iv/key reproductibilă
*/
$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;
?>