Php 散列密码中出现额外字符

Php 散列密码中出现额外字符,php,hash,passwords,sha1,Php,Hash,Passwords,Sha1,使用如上所述的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)

使用如上所述的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);  
}  

}  
类PassHash{
私有静态$algo='$2a';
私有静态$cost='10';
公共静态函数unique_salt(){
返回substr(sha1(mt_rand()),0,22);
}  
公共静态函数哈希($password){
返回crypt($password,
self::$algo。
赛尔夫::$成本。
“$”.self::unique_salt());
}  
公共静态函数检查密码($hash,$password){
$full_salt=substr($hash,0,29);
$new\u hash=crypt($password,$full\u salt);
//为了比较而重复值
回显“全盐”。$Full_Salt.
; 回显“密码”。$password.
; 回显“新哈希”。$New_哈希。“
”; 回显“哈希”。$Hash.
; 返回($hash==$new\u hash); } }
使用上述方法注册示例密码
passmark
会导致存储的哈希值为
$2a$10$0cc127859c17132050924uI2.10wlIVA.7XwrFtMJdx

但是,当尝试比较输入的登录名时,相同的密码被散列为
$2a$10$0cc127859c17132050924uI2.10wlIVA.7XwrFtMJdxCXjoQYEt8S

,其中附加了额外的字符
CXjoQYEt8S
,导致尝试失败


为什么会发生这种情况?

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

信息是否存储在数据库中?如果是这样的话,那么这个列是否能够被存储,能够接受那么长的字符串?@Pwner哦,我该死的上帝。作为答案提交,我会接受的。。。