3

PHP crypt() を使用して、Zend php アプリケーションでパスワードをハッシュしています。しかし、Zend_Auth_Adapter_DbTable でこのハッシュを使用するための解決策が思いつきません。crypt() で実行された後にパスワードハッシュが保存されていると仮定します...

    //Salt and hash...
    $salt = '$2a$07$'.$this->getSalt();
    $data['password'] = crypt($user_object->password, $salt);
    $this->_db_table->insert($data);

    //Authentication...
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
    $authAdapter->setTableName('users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
                //Now what? Possibly...
                ->setCredentialTreatment(/* But how? */);

Zend_Auth_Adapter_DbTable テーブル オブジェクトをこの種のソルティングおよびハッシュ戦略で使用するにはどうすればよいですか? 私は周りを見回しましたが、MD5およびSHAタイプのハッシュ以外のソリューションを実際に見つけることができません...

4

3 に答える 3

1

ユーザーテーブルにソルトを保存する場合は、独自のアダプターを作成する必要があります

別の場所にソルトがある場合は、パスワードを暗号化し、それをアダプターに渡すだけです。

$authAdapter->setCredential($cryptedPassword);

数週間前に同じ問題が発生しました。Zend_Auth_Adapter_DbTable を拡張して、独自のアダプターを作成することになりました。

実際に ZF2 Bcrypt lib をバックポートしましたが、crypt メソッドで使用できるはずです。

AuthAdapter-DbTableBcryptが必要な場合はご覧ください

于 2012-09-14T01:57:03.890 に答える
1

そこで、これを克服するために独自のアダプターを作成しました。ファイルをインクルードし、それを Zend_Auth アダプタの認証関数に詳細とともに渡します (ここでは、電子メールとパスワードによるログインを使用しています)。

class User_Authenticate_Adapter implements Zend_Auth_Adapter_Interface {
  protected $_username;
  protected $_password;

  public function __construct($email, $password) {
    $this->_email = $email;
    $this->_password = $password;
  }
  public function authenticate() {

    $dbTable = new Application_Model_DbTable_User();
    $select = $dbTable->select()->where('email = ?', $this->_email);
    $row = $dbTable->fetchRow($select);

    if($row == null) {
        return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND,$this->_email);
    }
    $data = $row->toArray();
    if(!crypt($data['password'], $this->_password)) {
        return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID,$this->_email);
    }
    else {
        return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS);
    }

  }
}

それが誰かを助けることを願っています。

于 2012-09-14T03:05:22.330 に答える
0

前にパスワードを取得し、それをcrypt機能のソルトとして使用します

$dbUser = new Application_Model_DbTable_User;
$data = $dbUser->fetchRow(array("username = ?" => $_POST["username"]));
$cryptedPassword = $data->password; // here is the salt

$authAdapter->setIdentity($_POST["username"])
            ->setCredential(crypt($_POST["password"], $cryptedPassword));
于 2013-07-11T06:59:48.280 に答える