2011-11-09 97 views
1

UPDATE:MD5没有给出正确的散列?

响应FOUND AT:

http://community.invisionpower.com/tracker/issue-21634-md5-once-password-does-not-decode-html-entities/


我想用我的论坛凭据(我使用Invision电源板)进行分离页面 ,所以我开始研究如何对密码进行操作。

主要是对会员表,你有members_pass_hash和members_pass_salt表和加密如下进行:

/** 
* Generates a compiled passhash. 
* Returns a new MD5 hash of the supplied salt and MD5 hash of the password 
* 
* @param string  User's salt (5 random chars) 
* @param string  User's MD5 hash of their password 
* @return string  MD5 hash of compiled salted password 
*/ 
static public function generateCompiledPasshash($salt, $md5_once_password) 
{ 
    return md5(md5($salt) . $md5_once_password); 
} 

从那以后,我开始做我的页面,但无论我做什么密码永不相匹配的中数据库。

即使使用MD5(CONCAT(MD5(members_pass_salt),MD5('mypass'))直接对MySQL不给我正确的价值...

我也搜索了社区和IPB的论坛,但不能缩小东西可以在这里是问题。

产生的密码我的这段代码是如下:

$password = $this->input->post('password'); 
$md5_once_password = md5($password); 
$password_hash = md5(md5($salt) . $md5_once_password); 

$盐来自于数据库和我有呼应到我的网页,以确保它是正确的盐为好。

在IPB代码继续还有:

if ($member['members_pass_hash'] == self::generateCompiledPasshash($member['members_pass_salt'], $md5_once_password)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

并回到初始一段代码我从IPB贴吧意味着密码与md5(md5($salt) . $md5_once_password)

免受成员表中的字段 members_pass_hash匹配

任何想法,我可能做错了,以使密码不匹配?

编码的地方或任何东西?

更新与hashs来进行测试:

这一个正常工作:

salt: Do.|O 
password: fsk23478cf 
hash: f3f3c75110ea9a27a1c01e580676997f 

这一个不工作,不知道为什么又:

salt: ppxps 
password: fsk23478cf!* 
hash saved by the forum: d060c2fb78c5b8a9e9d303c7b4fab456 
hash created by my aap: 0df0c7f24f7f79bd7ad8e501f5447986 

UPDATE2:

指责问题是exclamation mark上的密码,但仍不知道是什么原因造成的,以及如何解决。

密码与!将无法​​正常匹配,并且现在我想看看论坛做什么特别的!,我还没有找到,所有我所发现的是,它并修剪密码字段和那么md5就像上面说的那样。

+0

这有点不清楚。你是说你用两个不同的代码计算散列,结果不匹配? –

+0

@Oli查尔斯沃斯出于某种原因是的,这就是我想找出来的。像这样的代码都是一样的,但哈希从不匹配相同的密码和从数据库中保存的盐。 – Prix

+0

好的。你可以发布一个最小的,自包含的代码示例来演示这个问题吗? –

回答

0

你应该知道,如果你给任何值md5(),它将输出总是相同的值

这就是说,并假设您使用这两种算法检查相同的密码,它似乎就像你的盐在这两种情况下不相同。它可能是一个字符,它可能是一些看不见的字符,也可能是盐的不同来源,但似乎第一种情况下的盐不是第二种情况下的盐。

只要确保在讨论板上有帐户,并检查正在检查的密码(可能在调用函数/方法时将其保存到文件中?),并与传递给新创建函数的内容进行比较。

md5()不是魔术,如果你传递相同的值,它不应该有不同的表现 - 这是哈希函数的基础。 问题在于您传递给md5()的值。

+0

似乎就像我在密码中使用'!*'指明了一些相关内容,现在我需要弄清楚代码中哪些地方不正确。 – Prix

+0

有更新我的问题与哈希和他们的结果当失败!*如果你有任何想法:) – Prix

+0

@Prix:这似乎是与IPB的问题 - 请参阅[这个错误报告有关如果密码有惊叹号登录问题]( http://joomlacode.org/gf/project/jfusion/tracker/?action=TrackerItemEdit&tracker_item_id=9856)。找到IPB在将密码传递给'md5()'之前如何更改密码是很好的,所以你可以模仿这种行为。感叹号是否被删除或替换? – Tadeck

0

尝试修剪您的通行证,当您有\ n或任何其他类型的LF时,bcs会在字符串+ lf之外计算散列值。我希望这可以帮到你。

+0

代码点火器默认是这样做的,但我也试过修改密码并且没有改变。 – Prix

+0

你可以尝试另一种方式,也许ipb在最后做一个LF,所以你必须添加它?它只是一个愚蠢的想法 –

0

的长和短在此:

当跃跃欲试MD5哈希明文密码IPB通过ヶ辆先运行它()。

+1

其实这并非如此,这也是一个相当古老的问题,但我可以回想起尝试' html_entity_decode“,但最重要的是,IPB还有一个名为'cleanPassword'的密码解析函数,可以在他们的api代码中看到,这是我找到答案并获得代码工作的地方,但是我没有代码,所以这就是就像我记得的那样。 – Prix