PHP Bcrypt хэширование - PullRequest
       46

PHP Bcrypt хэширование

1 голос
/ 28 июля 2011

Я хочу использовать Хеширование Blowfish для хеширования пароля.

crypt() не поддерживает его в версиях PHP до 5.3

Моя версия PHP 5.2.14. Как я могу использовать хеширование Blowfish? Могу ли я использовать грушу Crypt_Blowfish вместо?

Ответы [ 2 ]

6 голосов
/ 28 июля 2011

PEAR Crypt_Blowfish предназначен для расширения PHP MCrypt - это схема шифрования двусторонняя , а не для хеширования. Хотя bcrypt основан на Blowfish, это не одно и то же. Неожиданно, CRYPT_BLOWFISH в PHP 5.3.0 является алгоритмом хеширования.

Есть ли причина, по которой обновление до 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'; 
3 голосов
/ 31 июля 2011
Пакет

PEAR Crypt_Blowfish обеспечивает шифрование blowfish с использованием расширения mcrypt, если оно доступно, а если нет, то реализует алгоритм blowfish изначально в 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.

...