2013-01-09 157 views
0

我正在使用crypt()函數,但我不知道我的實現是否正確。 我使用的是什麼樣的算法,如果我寫成才這樣的:PHP crypt函數和算法

crypt('PE','12345') 

我閱讀文檔,我不知道哪個算法選擇與像0​​五克焦鹽。

+0

請參閱[這裏](http://stackoverflow.com/questions/4447913/php-crypt-function-on-different-os/4447952#4447952) – vanneto

+0

如果這是密碼,節省自己很多麻煩和下載這個lib:https:// github。com/ircmaxell/password_compat – SDC

+0

@SDC這不是目的。我只是想知道PHP使用我的鹽的算法:) – Pete

回答

1

如文檔所述,取決於系統。

要確定您的系統支持什麼,您可以檢查由PHP定義的常量的值。常量CRYPT_SALT_LENGTH將顯示鹽串的預期長度。 DES接受雙字符鹽。 MD5接受12個字符。您還可以檢查是否設置了以下任何標誌:CRYPT_STD_DES,CRYPT_EXT_DES,CRYPT_MD5,CRYPT_BLOWFISH。爲此,請發出如下命令: echo CRYPT_MD5

數字1表示支持; 0表示它不是。

考慮在這裏http://www.techrepublic.com/article/the-perils-of-using-php-crypt/1058691

0

crypt()將使用基於標準的基於DES的DES算法或可能在系統上可用的替代算法返回一個散列字符串。

從PHP文件

+0

是的,但顯然它取決於你的參數中給出的鹽。而我的鹽12345不是記錄鹽。 – Pete

1

這取決於底層系統。我建議你改用hash()。例如。

$algos = hash_algos(); 
if (in_array("sha256", $algos)) { 
    $str = hash ("sha256", "something" . "salt"); 
} 

這種方式可以持續使用一種散列算法。

0

crypt()閱讀細節將返回使用標準的基於DES-Unix的算法一個散列字符串,如果它是可用的系統上,如果沒有,那麼它將返回基於MD5的algoritm。 ,你可以設置你想從下面的列表中使用何種類型的算法:

  1. CRYPT_STD_DES。
  2. CRYPT_EXT_DES。
  3. CRYPT_MD5。
  4. CRYPT_BLOWFISH。
  5. CRYPT_SHA256。
  6. CRYPT_SHA512。

和這個名單可以這樣使用:

//setting the value to 1 means enable this algorithm 
//which will return true or false. 
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"; 
} 

,這意味着你必須選擇你想,如果你不想要使用缺省使用前使用什麼類型的算法系統。