iT邦幫忙

DAY 6
2

遭遇PHP之經驗分享系列 第 6

[鐵人賽Day6]關於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 字符十六進制數)
(參考資料: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 />";
        ?>
    

結果如下圖:


上一篇
[鐵人賽Day5]PHP MySQL讀取中文時亂碼問題
下一篇
[鐵人賽Day7]混合加密MD5與Crypt異想天開的應用
系列文
遭遇PHP之經驗分享30

尚未有邦友留言

立即登入留言