即可列出所有的结果。
5.如何使用
示例1:
<?php $key = "this is a secret key"; $input = "Let us meet at 9 o'clock at the secret place."; $encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT); ?>
最简单的方式如示例1中所示,该方法表明对$input使用3DES的算法进行加密,加密密钥是$key.不过这中直接调用的方法已经不被官方推荐使用,也建议大家在开发中不要使用此种方式,不一定哪天该方法就不能用了。在php5下使用此种方式调用时,能看到一条warning信息,提示“PHP Warning: attempt to use an empty IV, which is NOT recommend”。
官方推荐的使用方式如示例2所示
示例2:
<?php $key = "this is a secret key"; $input = "Let us meet at 9 o'clock at the secret place."; // 打开mcrypt,或者mcrypt类型的资源对象,该对象使用ecb模式,使用3des作为加密算法。 $td = mcrypt_module_open('tripledes', '', 'ecb', ''); // 创建iv(初始化向量) $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // 根据密钥和iv初始化$td,完成内存分配等初始化工作 mcrypt_generic_init($td, $key, $iv); // 进行加密 $encrypted_data = mcrypt_generic($td, $input); // 反初始化$td,释放资源 mcrypt_generic_deinit($td); // 关闭资源对象,退出 mcrypt_module_close($td); ?>
解密的过程和加密是基本相同,只要把mcrypt_generic($td, $input)替换成mdecrypt_generic($td, $input)就可以了,其它部分完全相同。当然,对于3des这种对称加密算法而言,加密、解密所用的key是必须完全相同的。
6. 有关IV
不是所有的模型中都需要IV. CFB和OFB是必须有IV, CBC和EBC则是可选的。对于必选IV的模式来说,其加密和解密的IV的值必须完全相同,CBC和EBC则无此要求。可以相同也可以不同,没什么关系。
7.一个简单功能的加密解密类
class AMPCrypt { private static function getKey(){ return md5('exampleKey'); } public static function encrypt($value){ $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td)); mcrypt_generic_init($td, $key, $iv); $ret = base64_encode(mcrypt_generic($td, $value)); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $ret; } public static function dencrypt($value){ $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td)); $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td)); mcrypt_generic_init($td, $key, $iv); $ret = trim(mdecrypt_generic($td, base64_decode($value))) ; mcrypt_generic_deinit($td); mcrypt_module_close($td); return $ret; } }
希望本文所述对大家的PHP程序设计有所帮助。