好的验证用户,这是怎么验证一个Django来自PHP的用户,或者如何从PHP读取Django密码。
我认为OpenID是最好的解决办法,但我不得不在PHP应用程序Django的用户进行身份验证当今共享同一个数据库,这是我如何解决:
<?php
/* Generates crypted hash the same way as Django does */
function get_hexdigest($algorithm, $salt, $raw_password) {
if (!array_in($algorithm, array('md5', 'sha1'))) {
return false;
}
return $algorithm($salt.$raw_password);
}
/* Checks if password matches the same way Django does */
function check_password($raw_password, $django_password) {
list($algorithm, $salt, $hsh) = explode('$', $django_password);
return get_hexdigest($algoritm, $salt, $raw_password) === $hsh;
}
?>
的关键是理解的格式,其中Django的保存密码,这就是:
[算法] $ [盐] $ [散列]
因此,例如我有AUTH_USER行中的“管理员”,密码为“admin”用户和密码字段是:
sha1$63a11$85a93f217a72212b23fb0d5b95f3856db9575c1a
该算法为“sha1”,随机生成的盐为“63a11”,加密哈希为“85a93f217a72212b23fb0d5b95f3856db9575c1a”。
那么,你是谁在PHP中产生加密哈希?您简单的串联盐和原始密码,并用散列算法它,在这种情况下,SHA1:
<?php
$salt = '63a11';
$pass = 'admin';
echo sha1($salt.$admin); // prints "85a93f217a72212b23fb0d5b95f3856db9575c1a"
?>
这是不难!我通过阅读Django源代码中的相关代码得到了它。
是否正在修改PHP应用程序? – oggy 2009-07-19 21:55:07
顺便说一句,正确的术语是“Djangonauts” – 2009-07-21 13:12:44