php 的 mcrypt 加密,想使用对称算法,解决小块内容(比如 url、post)网上传输的安全性。即加密、解密用同一个密码。官方文档有个非常完整的演示功能的例子,大概顺序是:
- 打开 module: mcrypt_module_open()
- 生成 IV: mcrypt_get_iv_size() -> mcrypt_create_iv()
- 得到 key/密钥/密码:
- 初始化(引擎?): mcrypt_generic_init()
- 进行加密操作: mcrypt_generic()
- 关闭(引擎?): mcrypt_generic_end()
- 重新初始化(引擎?): mcrypt_generic_init()
- 进行解密操作: mdecrypt_generic()
- 关闭(引擎?): mcrypt_generic_end()
- 关闭 module : mcrypt_module_close()
代码示例
<?php function my_encrypt($string) { $key = 'supersecret'; $key = md5($key); //指定初始化向量iv的大小: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); //创建初始化向量: $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); /* Open module, trim key to max length */ $td = mcrypt_module_open('twofish','','ecb', ''); $key = substr($key, 0,mcrypt_enc_get_key_size($td)); /* Initialize encryption handle * */ if (mcrypt_generic_init($td, $key, $iv) != -1) { /* Encrypt data */ $c_t = mcrypt_generic($td, $string); mcrypt_generic_end($td); mcrypt_module_close($td); return $c_t; } //end if } function my_decrypt($string) { $key = 'supersecret'; $key = md5($key); //指定初始化向量iv的大小: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); //创建初始化向量: $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); /* Open module, trim key to max length */ $td = mcrypt_module_open('twofish','','ecb', ''); $key = substr($key, 0,mcrypt_enc_get_key_size($td)); /* Initialize encryption handle * (use blank IV) */ if (mcrypt_generic_init($td, $key, $iv) !=-1) { /* Encrypt data */ $c_t = mdecrypt_generic($td, $string); mcrypt_generic_end($td); mcrypt_module_close($td); return trim($c_t); //trim to remove //padding } //end if }