1. 程式人生 > >學習筆記---PHP中幾種加密演算法(MD5,shal,base64_encode等)

學習筆記---PHP中幾種加密演算法(MD5,shal,base64_encode等)

PHP中有多種加密演算法。

1.md5()—–不可逆,無解密演算法

 md5(string $str[,bool $raw_output = false|true]);

 引數:
 $str:待加密的字串
 $raw_output:可選引數為true或false,兩者區別是:
 true加密後密文為16位二進位制格式字元;
 false加密後密文為32位十六進位制格式字元。若此處沒有引數,則預設為false方式。

eg:

$num = "1234567adc89";
$a = md5($num,true);
$b = md5($num);
$a_len = strlen($a
); $b_len = strlen($b); echo "使用md5方式,引數為true的加密 :<br/>".$a." 字元長度長度為".$a_len; echo "<br/>使用md5方式,引數為false的加密: <br/>".$b." 字元長度長度為".$b_len;

頁面顯示結果為:
這裡寫圖片描述

2. crypt()—不可逆,無解密演算法

crypt(string $str, string [salt]);

crypt() 返回一個基於標準 UNIX DES 演算法或系統上其他可用的替代演算法的雜湊字串。
   引數:
   $str:待加密字串。
   salt:可選的鹽值字串。如果沒有提供,演算法行為將由不同的演算法實現決定,並可能導致不可預料的結束。

eg:

$num = "1234567adc89";
$c = crypt($num);
$c_len = strlen($c);
echo  "<br/>使用crypt方式加密 :<br/>".$c." 字元長度長度為".$c_len;

頁面執行結果:
這裡寫圖片描述
每次頁面重新整理後,加密後的字元都會發生變化。
這個演算法的雜湊值有多個,用法、含義也很大不同。因為是初學階段,用處也不多,所以就不去深究啦。在網上看見一篇博文解釋得更詳細,大家有興趣瞭解更改可以戳戳哦php基於crypt的加密例項

3.sha1()—不可逆,無解密演算法

string sha1 (string $str [, bool $raw_output = false ] )
引數:
$str:待加密字串
$raw_output: 可選引數是true|fasle。
true:加密後密文為 20 位字元長度。
flase:加密後密文是 40 位字元長度的十六進位制字串,若此處未設定引數,則預設false。

eg:

$num = "1234567adc89";
$d = sha1($num);
$d_len = strlen($d);
echo  "<br/>使用sha1方式加密 :<br/>".$d." 字元長度長度為".$d_len;

頁面執行結果:
這裡寫圖片描述

以上幾種雖然是不可逆加密,但是也可以根據查字典的方式去解密。請戳線上解密檢視解密哦。

上面的都是不可逆加密演算法,下面幾個將是可逆加密演算法。一般成對出現。

4.URL加/解密—可逆加密演算法

string urlencode ( string $str )  //用於加密
string urldecode ( string $encoded_str )  //用於解密
只有一個引數,即待加/解密的字串。

urlencode()函式用於將字串以URL編碼,同時它還便於將變數傳遞給下一頁。
原理是將需要轉碼的字元轉為16進位制,然後從右到左,取4位(不足4位直接處理),每2位做一位,前面加上%,編碼成%XY格式。
urldecode()函式則是將字串以URL解碼。

eg:

$num = "未來1997Lilian你好";
$e = urlencode($num);
$e_len = strlen($e);
echo  "<br/>使用urlencode方式加密 :<br/>".$e." 字元長度長度為".$e_len."<br/>";

$ee = urldecode($e);
$ee_len = strlen($ee);
echo "<br/>待解密字串:".$e;
echo  "<br/>使用urldecode方式解密 :<br/>".$ee." 字元長度長度為".$ee_len;

網頁結果顯示:
這裡寫圖片描述

可以看到,在密文中,數字和字母並沒有被加密。
因為urlencode()適用於統一資源識別符號(URI)的編碼,也用於為"application/x-www-form-urlencoded" MIME準備資料, 因為它用於通過HTTP的請求操作(request)提交HTML表單資料。

5.base64_ 加/解密—可逆加密演算法

string base64_encode ( string $data )  //用於加密
string base64_decode ( string $encoded_data [, bool $strict = false ] )  //用於解密

base64_encode()使用 base64 對 data 進行編碼。設計此種編碼是為了使二進位制資料可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體。
Base64-encoded 資料要比原始資料多佔用 33% 左右的空間

base64_decode() 
引數
$encoded_data : 編碼過的資料。
strict : 如果輸入的資料超出了 base64 字母表,則返回 FALSE對 encoded_data 進行解碼,返回原始資料,失敗則返回 FALSE。返回的資料可能是二進位制的。

eg:

$num = "未來1997Lilian你好";
$f = base64_encode($num);
$f_len = strlen($f);
echo  "<br/>使用base64_encode方式加密 :<br/>".$f." 字元長度長度為".$f_len."<br/>";

$ff = base64_decode($f);
$ff_len = strlen($ff);
echo "<br/>待解密字串:".$f;
echo  "<br/>使用base64_decode方式解密 :<br/>".$ff." 字元長度長度為".$ff_len;

網頁結果:
這裡寫圖片描述

這裡待加密的字串和上面用urlencode加密的字串是一樣的,但明顯看到加密結果不同。

以上是php中常用的一些加密方法,正在學習,所以稍作整理,方便閱讀與理解。