Tamam, bu bir Django PHP kullanıcıyı, ya da nasıl PHP bir Django parola "okumak" için kimlik doğrulaması için nasıl.
Ben OpenID iyi çözüm olduğunu düşünüyorum ama bugün aynı veritabanını paylaşan bir PHP uygulaması Django kullanıcıların kimliğini doğrulamak zorunda kaldı ve bu ben çözüldü nasıl:
<?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;
}
?>
Anahtar Django olan şifreleri kaydeder hangi biçimini anlamak için:
[Algoritması] $ [tuz] $ [hash]
Yani, örneğin ben auth_user satırda parola, "admin" ile bir "admin" kullanıcı ve parola alanını vardı:
sha1$63a11$85a93f217a72212b23fb0d5b95f3856db9575c1a
Algoritması "SHA1" olduğunu, rastgele oluşturulan tuz, "63a11" ve şifrelenmiş karma "85a93f217a72212b23fb0d5b95f3856db9575c1a" dir.
Yani PHP şifrelenmiş karma kim üretmek? Basit bir tuzunu ve ham şifre birleştirmek ve bu durumda, algoritma ile karma, SHA-1:
<?php
$salt = '63a11';
$pass = 'admin';
echo sha1($salt.$admin); // prints "85a93f217a72212b23fb0d5b95f3856db9575c1a"
?>
Bu zor değildi! Ben Django kaynaklarında ilgili kodu okuyarak aldım.