安裝和使用php的mcrypt擴充套件
PHP程式設計師們在編寫程式碼程式時,除了要保證程式碼的高效能之外,還有一點是非常重要的,那就是程式的安全性保障。PHP除了自帶的幾種加密函式外,還有功能更全面的PHP加密擴充套件庫Mcrypt和Mhash。
其中,Mcrypt擴充套件庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。PHP加密擴充套件庫Mcrypt的演算法和加密模式
Mcrypt庫支援20多種加密演算法和8種加密模式,具體可以通過函式mcrypt_list_algorithms()和mcrypt_list_modes()來顯示,結果如下:
Mcrypt支援的演算法有:cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes
Mcrypt支援的加密模式有:cbc cfb ctr ecb ncfb nofb ofb stream
這些演算法和模式在應用中要以常量來表示,寫的時候加上字首MCRYPT_和MCRYPT_來表示,如下面Mcrypt應用的例子:
DES演算法表示為MCRYPT_DES;
ECB模式表示為MCRYPT_MODE_ECB;
PHP加密擴充套件庫Mcrypt應用
先看一個例子,瞭解Mcrypt的工作流程,再來看看部分流程使用的函式:
- <?php
- $str = "我的名字是?一般人我不告訴他!";
- //加密內容
- $key = "key:111";
- //金鑰
- $cipher = MCRYPT_DES
- //密碼型別
- $modes = MCRYPT_MODE_ECB;
- //密碼模式
- $iv = mcrypt_create_iv(mcrypt_get_iv_size ($cipher,$modes),MCRYPT_RAND);//初始化向量
- echo "加密明文:".$str."<p>";
- $str_encrypt = mcrypt_encrypt($cipher, $key,$str,$modes,$iv);
- //加密函式
- echo "加密密文:".$str_encrypt." <p>";
- $str_decrypt = mcrypt_decrypt($cipher,
$key,$str_encrypt,$modes,$iv);
- //解密函式
- echo "還原:".$str_decrypt;
- ?>
執行結果:
加密明文:我的名字是?一般人我不告訴他!
加密密文: 鋶盌?]鷽?q攦軄L 笑 郺葄"簻 黙
還原:我的名字是?一般人我不告訴他!
<1>由例子中可看到,使用PHP加密擴充套件庫Mcrypt對資料加密和解密之前,首先建立了一個初始化向量,簡稱為iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可見建立初始化向 量需要兩個引數:size指定了iv的大小;source為iv的源,其中值MCRYPT_RAND為系統隨機數。
<2>函式mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,引數cipher和mode分別指演算法和加 密模式。
<3>加密函式$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); 該函式的5個引數分 別如下:cipher——加密演算法、key——金鑰、data(str)——需要加密的資料、mode——演算法模式、 iv——初始化向量
<4>解密函式 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); 該函式和加密函式的引數幾乎 一樣,唯一不同的是data,也就是說data為需要解密的資料$str_encrypt,而不是原始資料$str。
注:加密和解密函式中的引數cipher、key和mode必須一一對應,否則資料不能被還原。
安裝
此安裝主要針對Linux系統
首先要下載三個軟體,分別是
libmcrypt-2.5.8.tar.gz
mhash-0.9.9.tar.gz
mcrypt-2.6.8.tar.gz
【幾篇文章和在一起的,下面特別重視libmcrypt,但是我發現安裝mcrypt時候需要解決對libmcrypt還有mhash的依賴,這些好解決,不行yum一下就可以了】
# tar -xvf libmcrypt-X.X.X.tar
# cd libmcrypt-X.X.X
# ./configure
現在你應該已經把libmcrypt作為一個共享元件了(但不是一個PHP的共享元件)。執行命令:
# ldconfig
它將使得共享物件可以在C/C++開發中被使用。下面把mcrypt動態元件編譯到PHP中。首先,你需要PHP-devel 包中包含的 'phpize‘ 命令。
當你當前執行的PHP中已經有了 PHP-devel 後,輸入:
# cd ext/mcrypt
# phpize
# aclocal
# ./configure
# make clean
# make
# make install
現在php的安裝目錄下面應該有了mcrypt.so 的檔案,在 /etc/php.ini 新增:
extension=mcrypt.so
然後重啟一下apache,這樣我們就已經將mcrypt功能安裝成功了。
特別注意:
1、phpize需在解壓後的原始碼包下執行,執行後生成configure指令碼
2、執行./configure時,如果提示
configure: error: Cannot find php-config. Please use --with-php-config=PATH
請使用:
./configure --with-php-config=/php-install-path/bin/php-config #而不是使用php.ini