今天想提到PHP加密的部分,查詢了一下,目前常提到的加密有四種,將在以下已找到的資料作說明:
不可逆的加密函數
1.MD5
Message-Digest Algorithm 5 又稱 MD5,是電腦廣泛使用的雜湊演算法之一
其演算法複雜程度和不可逆的特性,通常用於確保資訊傳輸內容是否完整
因其不可逆的特性,因此只有加密的函數,沒有解密的函數
MD5會將輸入的字串進行編碼,會得到一個由32個字符組成的字串(32位元16進制)
函式為md5(string,raw)
string 為你將加密的資料
raw 可選擇16進制或2進制輸出格式,沒填寫則是默認32進制(TRUE - 原始 16 字符二進制格式,FALSE - 默認 32 字符十六進制數)
(參考資料:http://www.w3school.com.cn/php/func_string_md5.asp)
2.crypt
crypt函數返回使用DES、Blowfish 或MD5 加密的字符串
使用crypt編碼後,會產生一組亂碼,這組亂碼的開頭前兩個字串就是關鍵字串,,後面接的就是編碼過的資料字串, 這種編碼是屬於單向的
函式為crypt(str,salt)
str 為你將加密的資料
salt 用於增加被編碼字串數目的字串,使編碼更加安全,假如未提供salt參數,則每次使用該函數時會隨機產生一個
(參考資料:http://www.w3school.com.cn/php/func_string_crypt.asp)
可逆的加密函數
3.base64_encode
將字串以MIME BASE64編碼,在Base64中的可列印字元包括字母A-Z、a-z、數位0-9,這樣共有62個字元,此外兩個可列印符號在不同的系統中而不同
Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進制資料
加密函式為base64_encode ( string $data)
$data 為你將加密的資料
而因為它是屬於可逆加密,因此它的解密函式為
base64_decode ( string $data)
$data 為你「加密後」的編碼資料
(參考資料:
Base64:http://zh.wikipedia.org/wiki/Base64
base64_encode:http://php.net/manual/en/function.base64-encode.php
base64_decode:http://php.net/manual/en/function.base64-decode.php)
4.urlencode
此函數便於將字符串編碼並將其用於 URL 的請求部分,同時它還便於將變量傳遞給下一頁
返回字符串,此字符串中除了 -_. 之外的所有非字母數字字符都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼為加號(+)
加密函式為string urlencode ( string $str )
$str 為你將加密的資料
解密函式為string urldecode ( string $str )
$str 為你「加密後」的編碼資料
(參考資料:
urlencode:http://php.net/manual/en/function.urlencode.php
urldecode:http://php.net/manual/en/function.urldecode.php)
說了這麼多,還是實際測試一次比較實在,也比較清楚運用的方式
可以看的出來MD5跟crypt是不可逆的
程式碼如下:
「encrypt.php」
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
header("Content-Type:text/html; charset=utf-8");
$in="Test測試";
$md5=md5($in);
$crypt=crypt($in,$in);
$base64_encode=base64_encode($in);
$urlencode=urlencode($in);
echo "MD5:".$md5."<br />";
echo "MD5解密:".md5($md5)."<br /><hr />";
echo "crypt:".$crypt."<br />";
echo "crypt解密:".crypt($crypt,$crypt)."<br /><hr />";
echo "base64_encode:".$base64_encode."<br />";
echo "base64_encode解密:".base64_decode($base64_encode)."<br /><hr />";
echo "urlencode:".$urlencode."<br />";
echo "urlencode解密:".urldecode($urlencode)."<br /><hr />";
?>
結果如下圖: