[英]PHP Bcrypt hashing
我想使用Blowfish哈希來哈希密碼。
crypt()
在5.3之前的PHP版本中不支持它
我的PHP版本是5.2.14。 如何使用Blowfish哈希? 我可以代替使用PEAR的Crypt_Blowfish
嗎?
PEAR的Crypt_Blowfish旨在代表PHP的MCrypt擴展-它是一種雙向加密方案,而不是散列。 雖然bcrypt是基於Blowfish的,但這不是一回事。 令人困惑的是,PHP 5.3.0的CRYPT_BLOWFISH是一種哈希算法。
是否有原因無法升級到PHP 5.3.0+? 這不是您想要嘗試實現的東西。 如果可以的話, phpass是安全進行基於bcrypt的密碼哈希的一種好方法。 如果您絕對不能升級,則phpass會退回到較舊的哈希方案(但是它比普通的MD5等更為安全)。
如果由於某種原因您可以安裝Suhosin但不能升級PHP,則可以添加CRYPT_BLOWFISH支持。
為確保您當前未安裝CRYPT_BLOWFISH,請嘗試以下操作:
echo (CRYPT_BLOWFISH === 1) ? 'CRYPT_BLOWFISH is enabled!' : 'CRYPT_BLOWFISH is not available';
PEAR的Crypt_Blowfish軟件包使用mcrypt擴展名提供了河豚加密(如果可用),如果沒有,它將在php中本地實現河豚算法。 它不會退回到使用任何其他形式的加密。
該軟件包沒有“手寫”文檔,但是有自動生成的API文檔 ,它們是從軟件包本身的注釋派生的。
這就是我用它加密的方式:
$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP);
$iv = 'abc123+=';
$key = BLOWFISH_KEY;
$bf->setKey($key, $iv);
$encrypted = bin2hex($bf->encrypt($password));
並解密:
$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP);
$iv = 'abc123+=';
$key = BLOWFISH_KEY;
$bf->setKey($key, $iv);
$decrypted = trim($bf->decrypt(hex2bin($password)));
其中BLOWFISH_KEY是我在代碼其他地方定義的常量。
在這些示例中,我明確地使用了PHP實現。
如果我想讓Crypt_Blowfish決定使用哪個引擎,即確定它是否可以使用mcrypt擴展(如果可用)(否則使用php實現),那么我將使用CRYPT_BLOWFISH_AUTO進行切換。 要明確使用mcrypt擴展名,請指定CRYPT_BLOWFISH_MCRYPT。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.