Я хочу использовать хеширование Blowfish для хэш-пароля.
crypt()
не поддерживает его в версиях PHP до 5.3
Моя версия PHP – 5.2.14. Как я могу использовать хеширование Blowfish? Могу ли я использовать Crypt_Blowfish
PEAR?
PEAR Crypt_Blowfish предназначен для расширения PHP-расширения PHP – это двухсторонняя схема шифрования, а не для хэширования. Хотя 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';
Пакет Crypt_Blowfish PEAR обеспечивает шифрование 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.