mcrypt.* and mdecrypt.*
provide symmetric encryption and decryption using libmcrypt.
Both sets of filters support the same algorithms available to
mcrypt extension in the form of
mcrypt.ciphername where ciphername
is the name of the cipher as it would be passed to
mcrypt_module_open().
The following five filter parameters are also available:
Parameter | Required? | Default | Sample Values |
---|---|---|---|
mode | Optional | cbc | cbc, cfb, ecb, nofb, ofb, stream |
algorithms_dir | Optional | ini_get('mcrypt.algorithms_dir') | Location of algorithms modules |
modes_dir | Optional | ini_get('mcrypt.modes_dir') | Location of modes modules |
iv | Required | N/A | Typically 8, 16, or 32 bytes of binary data. Depends on cipher |
key | Required | N/A | Typically 8, 16, or 32 bytes of binary data. Depends on cipher |
Example #1 Encrypting file output using 3DES
<?php
$passphrase = 'My secret';
/* Turn a human readable passphrase
* into a reproducable iv/key pair
*/
$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);
?>
Example #2 Reading an encrypted file
<?php
$passphrase = 'My secret';
/* Turn a human readable passphrase
* into a reproducable iv/key pair
*/
$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;
?>