2012-03-29 17 views
0

ウェブサイトにサインアップするためのパスワードフィールドを含むフォームを作成しました。Zend Frameworkを使用してパスワードを保存する

new Zend_Form_Element_Password('password', array(
    'required' => true, 
    'label' => $this->getView()->translate('createprofile_password'), 
    'filters' => array('StringTrim'), 
    'validators' => array(
     new Zend_Validate_StringLength(array('min' => 6, 'max' => 20, 'encoding' => 'utf-8')), 
    ), 
    'class' => "validate['required','length[6,20]']", 
)), 

データベースに保存するにはどうすればよいですか? 私はこれのようなものを試しましたが、うまくいきません。パスワードは暗号化されません。

$profile = new Profile(); 
$entry = $profile->createEntry(array(
    'firstname' => $requestPost['firstname'], 
    'lastname' => $requestPost['lastname'], 
    'email' => $requestPost['email'], 
    'password' => $requestPost['password'], 
    'published' => 1, 
)); 
$profileId = $entry->save(); 
+0

暗号化するには、暗号化する必要があります。またはそれをハッシュします。 – bububaba

+0

ライブシステム/ウェブサイトでこれを実装しようと真剣に取り組んでいるのであれば、私はあなたのパスワードを暗号化することをお勧めします。これがちょうどそれを学ぶことである場合待つことができる – Bono

+1

プロファイルがどのようにデータベースに情報を格納しているか知らずに、この質問に答えることはできません。 Prifile :: createEntryとProfile :: saveの実装を教えてください – GordonM

答えて

1

これは同様に簡単です:後から文字列を再構築し、ハッシュパスワードを認証する

$profile = new Profile(); 
$entry = $profile->createEntry(array(
    'firstname' => $requestPost['firstname'], 
    'lastname' => $requestPost['lastname'], 
    'email' => $requestPost['email'], 
    //hash password using sha1 and a salt (returns 40 character string) . 
    //Save the salt reference somewhere so you can rebuilt the string to compare hashes for authentication. 
    //a salt is arbitrary data prepended or appended to the data being hashed 
    'password' => sha1($salt . $requestPost['password']), 
    'published' => 1, 
)); 
$profileId = $entry->save(); 

:それは資源に簡単ですので

//both hashes should match exactly 
if (sha1($salt . $inputPassword) === $password)//$password form data store 

ハッシュは、多くの場合、パスワードに使用されますパスワードを作成した人以外の誰もそれを知ることはできません。塩漬けされたハッシュを取り消す合理的な方法はありません。入力されたハッシュされたパスワード+塩が、保存されたハッシュされたパスワード+塩と同じであることがわかるだけです。

関連する問題