1. MD5加密
string md5 ( string $str [, bool $raw_output = false ] )
引數
str -- 原始字串。
raw_output -- 如果可選的 raw_output 被設定為 TRUE,那麼 MD5 報文摘要將以16位元組長度的原始二進位制格式返回。
這是一種不可逆加密,執行如下的程式碼
$password = '123456'; echo md5($password);
得到結果是
e10adc3949ba59abbe56e057f20f883e
2. Crype加密
string crypt ( string $str [, string $salt ] )
crypt() 返回一個基於標準 UNIX DES 演算法或系統上其他可用的替代演算法的雜湊字串。
引數
str -- 待雜湊的字串。
salt -- 可選的鹽值字串。如果沒有提供,演算法行為將由不同的演算法實現決定,並可能導致不可預料的結束。
這是也一種不可逆加密,執行如下的程式碼
$password = '123456'; $salt = "test";// 只取前兩個 echo crypt($password, $salt);
得到的結果是
teMGKvBPcptKo
使用自動鹽值的例子如下:
$password = crypt('mypassword'); // 自動生成鹽值 /* 你應當使用 crypt() 得到的完整結果作為鹽值進行密碼校驗,以此來避免使用不同雜湊演算法導致的問題。(如上所述,基於標準 DES 演算法的密碼雜湊使用 2 字元鹽值,但是基於 MD5 演算法的雜湊使用 12 個字元鹽值。)*/ if (crypt('mypassword', $password) == $password) { echo "Password verified!"; }
執行結果是輸出
Password verified!
以不同雜湊型別使用 crypt()的例子如下:
if (CRYPT_STD_DES == 1) { echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "n"; } if (CRYPT_EXT_DES == 1) { echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "n"; } if (CRYPT_MD5 == 1) { echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "n"; } if (CRYPT_BLOWFISH == 1) { echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "n"; } if (CRYPT_SHA256 == 1) { echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "n"; } if (CRYPT_SHA512 == 1) { echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "n"; }
其結果如下
Standard DES: rl.3StKT.4T8M Extended DES: _J9..rasmBYk8r9AiWNc MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0 Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6 SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
在 crypt() 函數支援多重雜湊的系統上,下面的常數根據相應的型別是否可用被設定為 0 或 1:
CRYPT_STD_DES - 基於標準 DES 演算法的雜湊使用 "./0-9A-Za-z" 字元中的兩個字元作為鹽值。在鹽值中使用非法的字元將導致 crypt() 失敗。
CRYPT_EXT_DES - 擴充套件的基於 DES 演算法的雜湊。其鹽值為 9 個字元的字串,由 1 個下劃線後面跟著 4 位元組迴圈次數和 4 位元組鹽值組成。它們被編碼成可列印字元,每個字元 6 位,有效位最少的優先。0 到 63 被編碼為 "./0-9A-Za-z"。在鹽值中使用非法的字元將導致 crypt() 失敗。
CRYPT_MD5 - MD5 雜湊使用一個以 $1$ 開始的 12 字元的字串鹽值。
CRYPT_BLOWFISH - Blowfish 演算法使用如下鹽值:「$2a$」,一個兩位 cost 引數,「$」 以及 64 位由 「./0-9A-Za-z」 中的字元組合而成的字串。在鹽值中使用此範圍之外的字元將導致 crypt() 返回一個空字串。兩位 cost 引數是迴圈次數以 2 為底的對數,它的範圍是 04-31,超出這個範圍將導致 crypt() 失敗。
CRYPT_SHA256 - SHA-256 演算法使用一個以 $5$ 開頭的 16 字元字串鹽值進行雜湊。如果鹽值字串以 「rounds=<N>$」 開頭,N 的數位值將被用來指定雜湊回圈的執行次數,這點很像 Blowfish 演算法的 cost 引數。預設的迴圈次數是 5000,最小是 1000,最大是 999,999,999。超出這個範圍的 N 將會被轉換為最接近的值。
CRYPT_SHA512 - SHA-512 演算法使用一個以 $6$ 開頭的 16 字元字串鹽值進行雜湊。如果鹽值字串以 「rounds=<N>$」 開頭,N 的數位值將被用來指定雜湊回圈的執行次數,這點很像 Blowfish 演算法的 cost 引數。預設的迴圈次數是 5000,最小是 1000,最大是 999,999,999。超出這個範圍的 N 將會被轉換為最接近的值。
3. Sha1加密
string sha1 ( string $str [, bool $raw_output = false ] )
引數
str -- 輸入字串。
raw_output -- 如果可選的 raw_output 引數被設定為 TRUE,那麼 sha1 摘要將以 20 字元長度的原始格式返回,否則返回值是一個 40 字元長度的十六進位制數位。
這是也一種不可逆加密,執行如下程式碼:
$password = '123456'; echo sha1($password);
得到的結果是
7c4a8d09ca3762af61e59520943dc26494f8941b
4. URL加密
string urlencode ( string $str )
此函數便於將字串編碼並將其用於 URL 的請求部分,同時它還便於將變數傳遞給下一頁。
返回字串,此字串中除了 -_. 之外的所有非字母數位字元都將被替換成百分號(%)後跟兩位十六進位制數,空格則編碼為加號(+)。此編碼與 WWW 表單 POST 資料的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體型別編碼方式一樣。由於歷史原因,此編碼在將空格編碼為加號(+)方面與 RFC1738 編碼不同。
string urldecode ( string $str )
解碼給出的已編碼字串中的任何 %##。 加號('+')被解碼成一個空格字元。
這是一種可逆加密,urlencode方法用於加密,urldecode方法用於解密,執行如下程式碼:
$url = 'http://www.xxx.com/CraryPrimitiveMan/'; $encodeUrl = urlencode($url); echo $encodeUrl . "n";// 如果是在網頁上展示的,就將n修改為<br/> echo urldecode($encodeUrl);
得到的結果如下
http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F http://www.xxx.com/CraryPrimitiveMan/
基於RFC 3986的加密URL的方法如下:
function myUrlEncode($string) { $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'); $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]"); return str_replace($entities, $replacements, urlencode($string)); }
5. Base64資訊編碼加密
string base64_encode ( string $data )
使用 base64 對 data 進行編碼。
設計此種編碼是為了使二進位制資料可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體。
Base64-encoded 資料要比原始資料多佔用 33% 左右的空間。
string base64_decode ( string $data [, bool $strict = false ] )
對 base64 編碼的 data 進行解碼。
引數
data -- 編碼過的資料。
strict -- 如果輸入的資料超出了 base64 字母表,則返回 FALSE。
執行如下程式碼:
$name = 'CraryPrimitiveMan'; $encodeName = base64_encode($name); echo $encodeName . "n"; echo base64_decode($encodeName);
其結果如下
Q3JhcnlQcmltaXRpdmVNYW4= CraryPrimitiveMan
推薦phpass
經 phpass 0.3 測試,在存入資料庫之前進行雜湊保護使用者密碼的標準方式。 許多常用的雜湊演算法如 md5,甚至是 sha1 對於密碼儲存都是不安全的, 因為駭客能夠使用那些演算法輕而易舉地破解密碼。
對密碼進行雜湊最安全的方法是使用 bcrypt 演算法。開源的 phpass 庫以一個易於使用的類來提供該功能。
<?php // Include phpass 庫 require_once('phpass-03/PasswordHash.php') // 初始化雜湊器為不可移植(這樣更安全) $hasher = new PasswordHash(8, false); // 計算密碼的雜湊值。$hashedPassword 是一個長度為 60 個字元的字串. $hashedPassword = $hasher->HashPassword('my super cool password'); // 你現在可以安全地將 $hashedPassword 儲存到資料庫中! // 通過比較使用者輸入內容(產生的雜湊值)和我們之前計算出的雜湊值,來判斷使用者是否輸入了正確的密碼 $hasher->CheckPassword('the wrong password', $hashedPassword); // false $hasher->CheckPassword('my super cool password', $hashedPassword); // true ?>
更多相關知識,請關注 PHP中文網!!
以上就是php中的加密方法有哪些?的詳細內容,更多請關注TW511.COM其它相關文章!