這篇文章主要介紹了PHP實現加密的幾種方式,非常全面實用,都是項目中經常需要用到的,需要的朋友可以參考下
PHP中的加密方式有如下幾種
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 -- 可選的鹽值字符串。如果沒有提供,算法行為將由不同的算法實現決定,并可能導致不可預料的結束。
這是也一種不可逆加密,執行如下的代碼
代碼如下:
得到的結果是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
以上幾種雖然是不可逆加密,但是也可以根據查字典的方式去解密。如下的地址中就提供了可以將上面的加密結果解密出來的功能。
http://www.cmd5.com/
那大家是不是加了就算加了密,也沒用啊,其實不然,只要你的加密足夠復雜,被破解出的可能性就越小,比如用以上三種加密方式混合加密,之后我會推薦給大家一個php的加密庫。
4. URL加密
string urlencode ( string $str )
此函數便于將字符串編碼并將其用于 URL 的請求部分,同時它還便于將變量傳遞給下一頁。
新聞熱點
疑難解答