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