Zend_Auth setCredentialTreatment

Я использую Zend_Auth с setCredentialTreatment для установки метода хэша и соли. Я вижу, что все примеры делают что-то вроде этого, где salt кажется вставленной в виде текста.

-> setCredentialTreatment ( 'SHA1 (CONCAT (соль))?

но моя соль хранится в базе данных. Я мог бы получить его сначала, а затем использовать его в setCredentialTreatment но есть ли способ определить его непосредственно как имя поля, поэтому setCredentialTreatment знал бы, чтобы получить его из этого поля? вроде того, как мы определяем имя поля для имени пользователя или пароля

 ->setCredentialColumn('password') 

У меня проблема, связанная с тем, что я бы хотел использовать SHA512, а не SHA1. Возможно ли это или недоступно? Все примеры, которые я вижу, используют SHA1.

Я должен сказать, что я довольно новичок в zend и переношу существующее приложение, поэтому, пожалуйста, пройдите на меня с ответами.

Related of "Zend_Auth setCredentialTreatment"

В приведенном примере используется соль, хранящаяся в базе данных. Он будет работать до тех пор, пока соль хранится в каждой строке в поле под названием «соль». Если соль не была в БД и в переменной PHP вместо этого, код был бы чем-то более похож:

 ->setCredentialTreatment("SHA1(CONCAT(?, '$salt'))") 

Что касается использования SHA512, это может быть немного сложнее. Предполагая, что вы используете MySQL, SHA1 () в этом случае является функцией MySQL, а MySQL не имеет функции для SHA512, насколько я могу судить, и PHP не редактирует: я ошибался в последнем, см. Комментарии ). Таким образом, вам придется реализовать свою собственную функцию PHP SHA512, сначала загрузить соль для пользователя из базы данных, хешировать результат и ничего не делать с переменной в setCredentialTreatment.

Как и в другом ответе, вы можете написать свой собственный Zend_Auth_Adapter для этого. Адаптер auth – это класс, который обрабатывает аутентификацию, предположительно в тот момент, когда вы используете Zend_Auth_Adapter_DbTable. Вы можете найти дополнительную информацию об адаптерах auth в руководстве: http://framework.zend.com/manual/en/zend.auth.introduction.html

Вот пример:

 class My_Auth_Adapter extends Zend_Auth_Adapter_DbTable { public function authenticate() { // load salt for the given identity $salt = $this->_zendDb->fetchOne("SELECT salt FROM {$this->_tableName} WHERE {$this->_identityColumn} = ?", $this->_identity); if (!$salt) { // return 'identity not found' error return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identity); } // create the hash using the password and salt $hash = ''; // SET THE PASSWORD HASH HERE USING $this->_credential and $salt // replace credential with new hash $this->_credential = $hash; // Zend_Auth_Adapter_DbTable can do the rest now return parent::authenticate(); } } 

Вы можете написать свой собственный Zend_Auth_Adapter .