何志明
摘 要 隨著互聯網技術的發展,越來越多的PHP語言開發網站不斷涌現,特別是網絡上的大量交易和大量數據傳輸,PHP網站所暴漏出來的安全性問題也越來越突出,數據加密技術就顯越來越重要了。
【關鍵詞】網站安全;數據加密;PHP技術
1 PHP加密的基本原理
PHP是英文超文本處理語言Hypertext Preprocessor的縮寫,是對文件或數據按某種加密算法進行計算處理,使其成為不可讀的一段數字代碼,通過這樣的途徑來達到保護數據不被非法竊取和閱讀的目的。PHP 是一種 HTML 內嵌式的語言,是一種在服務器端執行的嵌入HTML文檔的腳本語言,現已被廣泛地運用。
2 PHP的常用函數及其應用
2.1 不可逆的加密函數為:md5()、crypt()
md5() 用來計算 MD5 哈稀。語法為:string md5(string str);
crypt() 將字符串用 UNIX 的標準加密 DES 模塊加密。這是單向的加密函數,無法解密。欲比對字符串,將已加密的字符串的頭二個字符放在 salt 的參數中,再比對加密后的字符串。語法為:string crypt(string str, string [salt])。
2.2 可逆轉的加密為:base64_encode()、urlencode() 相對應的解密函數:base64_decode() 、urldecode()
base64_encode() 將字符串以 MIME BASE64 編碼。此編碼方式可以讓中文字或者圖片也能在網絡上順利傳輸。語法為string base64_encode(string data); 它的解密函數為:string base64_decode(string encoded_data); 將復回原樣。
urlencode() 將字符串以 URL 編碼。例如空格就會變成加號。語法為:string urlencode(string str);
它的解密函數為:string urldecode(string str); 將復回原樣。
2.3 加密/解密字符串函數應用舉例
/**
* 可逆的字符串加密函數
* @param int $txtStream 待加密的字符串內容
* @param int $password 加密密碼
* @return string 加密后的字符串
*/
public static function enCrypt($txtStream,$password){
//密鎖串,不能出現重復字符,內有A-Z,a-z,0-9,/,=,+,_,
$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';
//隨機找一個數字,并從密鎖串中找到一個密鎖值
$lockLen = strlen($lockstream);
$lockCount = rand(0,$lockLen-1);
$randomLock = $lockstream[$lockCount];
//結合隨機密鎖值生成MD5后的密碼
$password = md5($password.$randomLock);
//開始對字符串加密
$txtStream = base64_encode($txtStream);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for ($i=0; $i $k = ($k == strlen($password)) ? 0 : $k; $j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen); $tmpStream .= $lockstream[$j]; $k++; } /** 3 PHP加密擴展庫及應用 3.1 mhash擴展庫 安裝Mhash擴展庫:首先把PHP目錄下的libmhash.dll文件copy到系統目錄下,然后在php.ini文件中找到”;extension=php_mhash.dll”將前面的分號去掉,最后重啟服務器。 Mhash擴展庫常量:Mhash擴展庫支持MD5,SHA1,CRC32等多種散列算法,可以使用mhash_count()和mhash_get_hash_name()函數輸出支持的算法名稱。 Mhash擴展庫應用:獲取文件的全部內容:file_get_contents(文件名)。 3.2 Mcrypt()擴展庫 安裝Mcrypt()擴展庫:首先把PHP目錄下的libmcrypt.dll文件copy到系統目錄下,然后在php.ini文件中找到”;extension=php_mcrypt.dll”將前面的分號去掉,最后重啟服務器。 Mcrypt()擴展庫常量:支持20多種加密算法和8種加密模式,可以通過函數mcrypt_list_algorithms()和mcrypt_list_modes()來查看。 Mcrypt應用:初始化向量:mcrypt_create_iv(該向量的大小,向量的源(MCRYPT_RAND:取系統的隨機數)) 獲取到初始化向量的大小:mcrypt_create_iv_size(加密算法;加密模式); 加密:mcrypt_encrypt(加密算法,密鑰,需要加密的數據,算法模式,向量); 解密:mcrypt_decrypt(加密算法,密鑰,需要解密的數據,算法模式,向量)。 4 結語 PHP加密函數或加密庫只是一種簡單的阻止數據在傳輸過程中泄密方式, PHP不能阻止數據在傳輸過程中泄密,Mcrypt和Mhash擴展庫則提供了更全面加密與解密方法。要想構建一個更加安全性的網站,需要將服務器與客戶端間數據傳輸的安全性綜合考慮,同時配合Apache-SSL等其它安全服務器使用,以便組建一個性能更加安全的網站系統。 作者單位 重慶三峽職業學院 重慶市 404155