[PHP]關於PHP加密與解密

摘要:[PHP]關於PHP加密與解密

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

<html>
    <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
    <body>
        <?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 />";
        ?>
    </body>
</html>
 
結果如下圖: