2011-01-30 173 views
0

我正在尝试整合vBulliten和Django的用户数据库。我知道vB使用md5算法对它的密码进行哈希处理,并使用salt。我有每个vB用户的salt数据和密码,并想知道如何将这些帐户导入Django。Django中的密码哈希

我试过很明显,改变了Django用户的密码;

MD5 $ vb's_salt $ vb's_password

这只是抛出回Django的登录表格,有消息说“用户名和密码不匹配”

任何想法?

+0

你能提供一个vBulletin条目已知密码的例子(如“密码” :)然后我们可以帮助更容易,甚至拿出一些自定义代码来允许这个。 – nealmcb 2011-02-16 05:56:53

回答

1

明显的第一个问题:您是如何更改用户密码的?您需要将algo $ salt $ password字符串直接放入数据库中。

很可能vBulleting使用另一种方式从密码和salt中创建密码哈希。如果是这种情况,您可能需要实现另一种登录方式,以不同的方式检查用户密码,然后以Django格式存储它。

+0

stefanw,感谢您的参与。我通过网站的管理部分将密码添加到数据库。您知道以algo $ salt $ password格式显示密码的密码框吗?这是通过手工一次性完成的,以检查它是否可行。其目的是最终编写一个Python脚本来完成这个任务。 – 2011-01-31 19:54:18

1

您可以手动更新数据库的密码,或者编写一些Python。

一个用户对象的密码属性是在本格式的字符串:

hashtype$salt$hash

这hashtype,盐和散列,由美元符号字符分隔。

Hashtype是sha1(默认),md5或crypt - 用于执行密码单向散列的算法。 Salt是一个随机字符串,用于限制原始密码以创建哈希。请注意,只有具有标准Python crypt模块的平台才支持crypt方法。

例如:

sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4

的set_password()和check_password()函数处理的设置和幕后这些值的检查。

(参考:http://docs.djangoproject.com/en/dev/topics/auth/#passwords

+0

崇高,鉴于我对stefanw的回复的上述评论,你会建议失败是因为我没有使用django的用户对象方法来更改测试用户的密码吗?再次感谢您的输入。 – 2011-01-31 19:56:19

1

vBulletin不确实盐和散列密码方式与Django的相同。

vBulletin确实是这样的:

$hash_stored_in_database = md5(md5($plaintext_password) . $salt);