【问题标题】:Extra characters turning up in hashed password散列密码中出现额外字符
【发布时间】:2013-10-06 04:52:33
【问题描述】:

使用 here 中描述的 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,导致尝试失败。

为什么会这样?

【问题讨论】:

  • 信息是否存储在数据库中?如果是这样,它存储的列是否能够接受该长度的字符串?
  • @Pwner 哦,我的天啊。提交它作为答案,我会接受它......

标签: php hash passwords sha1


【解决方案1】:

确保表格列能够接受该长度的字符串。

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多