php加密函數:php
不可逆的加密函數爲:md5()、crypt()
md5() 用來計算 MD5 哈稀。語法爲:string md5(string str);
crypt() 將字符串用 UNIX 的標準加密 DES 模塊加密。這是單向的加密函數,沒法解密。欲比對字符串,將已加密的字符串的頭二個字符放在 salt 的參數中,再比對加密後的字符串。語法爲:string crypt(string str, string [salt]);
可逆轉的加密爲:base64_encode()、urlencode() 相對應的解密函數:base64_decode() 、urldecode()
base64_encode() 將字符串以 MIME BASE64 編碼。此編碼方式可讓中文字或者圖片也能在網絡上順利傳輸。語法爲string base64_encode(string data); 它的解密函數爲:string base64_decode(string encoded_data); 將復回原樣
urlencode() 將字符串以 URL 編碼。例如空格就會變成加號。語法爲:string urlencode(string str); 算法
它的解密函數爲:string urldecode(string str); 將復回原樣數據庫
PHP中的加密方式有以下幾種:安全
1. MD5加密
網絡
string md5 ( string $str [, bool $raw_output = false ] )app
參數函數
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 -- 可選的鹽值字符串。若是沒有提供,算法行爲將由不一樣的算法實現決定,並可能致使不可預料的結束。
這是也一種不可逆加密,執行以下的代碼
獲得的結果是teMGKvBPcptKo
使用自動鹽值的例子以下:
執行結果是輸出 Password verified!
以不一樣散列類型使用 crypt()的例子以下:
其結果以下
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
以上幾種雖然是不可逆加密,可是也能夠根據查字典的方式去解密。以下的地址中就提供了能夠將上面的加密結果解密出來的功能。
那你們是否是加了就算加了密,也沒用啊,其實否則,只要你的加密足夠複雜,被破解出的可能性就越小,好比用以上三種加密方式混合加密,以後我會推薦給你們一個php的加密庫。
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的方法以下:
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。
執行以下代碼:
其結果以下
推薦phpass
經 phpass 0.3 測試,在存入數據庫以前進行哈希保護用戶密碼的標準方式。 許多經常使用的哈希算法如 md5,甚至是 sha1 對於密碼存儲都是不安全的, 由於駭客可以使用那些算法垂手可得地破解密碼。
對密碼進行哈希最安全的方法是使用 bcrypt 算法。開源的 phpass 庫以一個易於使用的類來提供該功能。