0

ここで説明されているように PassHash クラスを使用すると、ログインの詳細を既存のハッシュと照合するときに問題が発生します。

class PassHash { 

private static $algo = '$2a'; 
private static $cost = '$10';  

public static function unique_salt() {  
    return substr(sha1(mt_rand()),0,22);  
}  

public static function hash($password) {  
    return crypt($password,  
    self::$algo .  
    self::$cost .  
    '$' . self::unique_salt());
}  

public static function check_password($hash, $password) { 
    $full_salt = substr($hash, 0, 29); 
    $new_hash = crypt($password, $full_salt); 

    //echoing values for comparison's sake
    echo 'Full Salt '.$full_salt.'<br/>';
    echo 'password '.$password.'<br/>';
    echo 'New Hash '.$new_hash.'<br/>';
    echo 'Hash '.$hash.'<br/>';

    return ($hash == $new_hash);  
}  

}  

上記を使用してパスワードの例を登録するpassmarkと、 のハッシュが保存されます
$2a$10$0cc127859c17132050924uI2.10wlIVA.7XwrFtMJdx

ただし、入力されたログインを比較しようとすると、同じパスワードが としてハッシュされ$2a$10$0cc127859c17132050924uI2.10wlIVA.7XwrFtMJdxCXjoQYEt8S
余分な文字CXjoQYEt8Sが追加され、試行が失敗します。

なぜこれが起こるのでしょうか?

4

1 に答える 1

2

テーブル列がその長さの文字列を受け入れることができることを確認してください。

于 2013-09-30T13:39:11.113 に答える