<PHP字符串參考
定義和用法
的crypt()函數返回使用DES,Blowfish算法,或MD5算法散列字符串。
這個函數的作用在不同的操作系統不同。 PHP會檢查什麼算法可用,安裝時使用什麼算法。
鹽參數是可選的。 然而, crypt()創建無鹽弱密碼。 確保指定足夠強的鹽為更好的安全性。
有跡象表明,與一起使用的一些常量crypt()函數。 這些常量的值由PHP在安裝時設置。
常量:
- [CRYPT_STD_DES] -標準DES-基於散列與從字母表兩個字符的鹽"./0-9A-Za-z" 使用的鹽無效字符將導致此函數失敗。
- [CRYPT_EXT_DES] - 擴展基於DES的散列與由一個下劃線隨後的4個字節迭代計數和4字節的鹽的一個九字符鹽。 這些被編碼為可打印的字符,每個字符的6位,至少顯著角色首次。 0到63的值被編碼為"./0-9A-Za-z" 使用的鹽無效字符會導致功能失效。
- [CRYPT_MD5] - MD5具有12個字符的鹽從1開始$ $散列
- [crypt_blowfish的] -河豚散列與鹽開始$ 2A,$ 2×$,或$ $ 2Y,一個兩位數成本參數"$"和22個字符從字母"./0-9A-Za-z" 。 使用字母之外的字符將導致此函數返回一個零長度字符串。 在"$"參數是用於底層的Blowfish-撞壞散列algorithmeter迭代計數的基數為2的對數,並且必須在範圍4月31日。 超出此範圍的值會導致功能失效。
- [CRYPT_SHA_256] - SHA-256散列以16字符鹽起始$ 5 $。 如果鹽字符串起始"rounds=<N>$"則使用N的數字值,以指示所述散列迴路應多少次被執行,很象上的Blowfish成本參數。 回合的默認數量為5000,有一個最低的1000,最大值為999,999,999。 該範圍之外的任何選擇N個將被截斷到最近的限制。
- [CRYPT_SHA_512] - SHA-512散列以16字符鹽開始$ 6 $。 如果鹽字符串起始"rounds=<N>$"則使用N的數字值,以指示所述散列迴路應多少次被執行,很象上的Blowfish成本參數。 回合的默認數量為5000,有一個最低的1000,最大值為999,999,999。 該範圍之外的任何選擇N個將被截斷到最近的限制。
上,其中該功能支持多個算法的系統,上述常數設置為"1"如果支持和"0"否則。
Note:沒有解密功能。 該crypt()函數使用單向算法。
句法
crypt( str,salt )
參數 | 描述 |
---|---|
str | 需要。 指定要散列字符串 |
salt | 可選的。 鹽字符串的基礎上散列 |
技術細節
返回值: | 返回編碼的字符串或字符串短於13個字符,並保證從在發生故障時的鹽不同 |
---|---|
PHP版本: | 4+ |
更新日誌: | $ 2X $ $和$ 2Y模式河豚在PHP 5.3.7中加入應對潛在的高位攻擊。 常量SHA-256和SHA-512在PHP 5.3.2中加入。 由於PHP 5.3.2的,無效輪河豚行為返回"failure"字符串("*0" or "*1")而不是回落到DES。 由於PHP 5.3.0的,PHP包含它自己的MD5加密,DES標準,擴展DES和河豚算法實現,並且如果系統缺乏對一個或一個以上的算法的支持將使用它。 |
例
實施例1
在這個例子中,我們將測試不同的算法:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES:
".crypt('something','_S4..some')."\n<br>";
}
else
{
echo
"Extended DES not supported.\n<br>";
}
// 12 character salt
starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5:
".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo
"MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two
digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is
5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256:
".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16
character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512:
".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
代碼的輸出類似(depending on the operating system) :
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5:
$1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish:
$2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256:
$5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512:
$6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
<PHP字符串參考