©
本文档使用
php.cn手册 发布
mcrypt.*和
mdecrypt.*使用 libmcrypt 提供了对称的加密和解密。这两组过滤器都支持
mcrypt 扩展库中相同的算法,格式为
mcrypt.ciphername,其中
ciphername
是密码的名字,将被传递给
mcrypt_module_open() 。有以下五个过滤器参数可用:
参数 | 是否必须 | 默认值 | 取值举例 |
---|---|---|---|
mode | 可选 | cbc | cbc, cfb, ecb, nofb, ofb, stream |
algorithms_dir | 可选 | ini_get('mcrypt.algorithms_dir') | algorithms 模块的目录 |
modes_dir | 可选 | ini_get('mcrypt.modes_dir') | modes 模块的目录 |
iv | 必须 | N/A | 典型为 8,16 或 32 字节的二进制数据。根据密码而定 |
key | 必须 | N/A | 典型为 8,16 或 32 字节的二进制数据。根据密码而定 |
Example #1 用 3DES 将文件加密输出
<?php
$passphrase = 'My secret' ;
$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 读取加密的文件
<?php
$passphrase = 'My secret' ;
$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 ;
?>