it-swarm.com.de

joomla Passwortverschlüsselung

Ich muss auf die Joomla-Benutzertabelle jos_users zugreifen, um die Anmeldung von einem externen PHP-Skript [Codeignitor] aus zu überprüfen.

joomla speichert das Passwort so

4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT

Sieht so aus, als wäre dies nicht das normale MD5, daher kann ich md5(password) nicht verwenden.

wie kann ich das Passwort erstellen?

Vielen Dank.

33
Red

Joomla-Passwörter sind MD5-Hashes, aber die Passwörter werden gesalzen, bevor sie gehashed werden .. Sie werden in der Datenbank als {hash}:{salt} gespeichert. Dieser Salt ist eine zufällige Zeichenfolge mit 32 Zeichen.

Um einen neuen Passwort-Hash zu erstellen, würden Sie md5($password.$salt) tun.

EDIT

Okay, um ein Passwort zu überprüfen, sagen Sie, ein Benutzer myguy gibt das Passwort mypassword ein. Sie würden die Zeile aus der Datenbank abrufen, die den Benutzernamen myguy enthält.

In dieser Zeile finden Sie ein Passwort, sagen Sie 4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT. Sie teilen den Passwort-Hash und das Salt auf:

$hashparts = preg_split (':' , $dbpassword);
echo $hashparts[0]; //this is the hash  4e9e4bcc5752d6f939aedb42408fd3aa
echo $hashparts[1]; //this is the salt  0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT

berechnen Sie nun den Hash mit diesem Salt und dem eingegebenen Passwort myguy

$userhash = md5($userpassword.$hashparts[1]); // This would be 'mypassword' and the salt used in the original hash

Wenn nun $userhash und $hashparts[0] identisch sind, hat der Benutzer das richtige Passwort eingegeben.

61
klennepette

Vom joomla Forum aus ist es das, was dahinter steckt:

A. Generate a password
B. Generate a string with 32 random characters
C. Concatenate Password (Step A) and RandomString (Step B)
D. Take md5(Result of Step C)
E. store Step D Result : Step B Result

Beispiel:

Generate a password - Let 'testing'
Generate a string of 32 random characters - 'aNs1L5PajsIscupUskaNdPenustelsPe'
Concatenate Password and random string - testingaNs1L5PajsIscupUskaNdPenustelsPe
md5(Step C Result) - 5cf56p85sf15lpyf30c3fd19819p58ly
store step d:step B - 5cf56p85sf15lpyf30c3fd19819p58ly:aNs1L5PajsIscupUskaNdPenustelsPe

Sie können Code in Joomla gerne finden

$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword("testing", $salt);
$password = $crypt . ':' . $salt;

Oder wir können sagen

password DB field = md5(password + salt) + ":" + salt 

Wo Salz zufällig eine Zeichenfolge von 32 Zeichen ist.

vielen Dank

23
Er. Anurag Jain

In Joomla Standard können Sie ein Passwort auf folgende Weise erstellen

                     jimport('joomla.user.helper');
             $salt = JUserHelper::genRandomPassword(32);
             $crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
             $password = $crypt.':'.$salt;

sie erwähnen, dass Sie von externen Dateien (oder Programmen) aus zugreifen. Wenn Sie auf einer anderen Seite eine Joomla-Installation haben, können Sie von außerhalb der Joomla-Struktur darauf zugreifen.

mit joomla default frame funktioniert das so

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
5
Jobin Jose

Ich konnte preg_split nicht verwenden, aber explode funktioniert gut. 

$hashparts = explode (':' , $dbpassword);
3
jayadevkv

Joomla! verwendet PhPass.

root/libraries/phpass/PasswordHash.php

schau mal hier. Sie sehen hier, wie das Passwort generiert wird.

$ 2y ist das Standardpräfix (und das bevorzugte Präfix) für bcrypt-Hashes. Was Code betrifft, sollten Sie sich die Methoden JUserHelper'shashPassword und verifyPassword anschauen, um zu sehen, wie Joomlas gerade mit den Dingen arbeitet.


Einige Referenzen -

https://github.com/joomla/joomla-cms/blob/3.4.1/libraries/joomla/user/helper.php#L296-L387

https://docs.joomla.org/API15:JUserHelper/getCryptedPassword

https://docs.joomla.org/API15:JUserHelper/getSalt

Überprüfen Sie die Links, ich hoffe, es wird hilfreich sein :)

2
Joomler

In den Joomla-Quellendatei-Bibliotheken/joomla/crypt/password/simple.php gibt es mehrere Möglichkeiten, wie sie gespeichert werden, und einige haben kein ':' - Zeichen.

    switch ($type)
    {
        case '$2a$':
        case JCryptPassword::BLOWFISH:
            if (JCrypt::hasStrongPasswordSupport())
            {
                $type = '$2y$';
            }
            else
            {
                $type = '$2a$';
            }

            $salt = $type . str_pad($this->cost, 2, '0', STR_PAD_LEFT) . '$' . $this->getSalt(22);

            return crypt($password, $salt);

        case JCryptPassword::MD5:
            $salt = $this->getSalt(12);

            $salt = '$1$' . $salt;

            return crypt($password, $salt);

        case JCryptPassword::JOOMLA:
            $salt = $this->getSalt(32);

            return md5($password . $salt) . ':' . $salt;


    }
}
2
Sam Adamsh

Joomla "versteht" die Passwörter mit "normalem" md5.

Was ich in der Vergangenheit getan habe (um das Login eines Benutzers zu testen), war, das ursprüngliche Passwort zu speichern, ein neues in md5 zu verschlüsseln, es in der Datenbank zu ersetzen, es mit dem Browser zu testen (und es funktioniert) und wann es war Wenn Sie fertig sind, fügen Sie das ursprüngliche Kennwort in die Datenbank ein.

0
jackJoe

Wenn Sie nur md5 ($ password) verwenden; es wird funktionieren, probiere es aus. Joomla verfügt über einen Mechanismus, der mit mehreren Arten von Kennwörtern (einschließlich starker Kennwörter) funktioniert. Sie müssen sich nicht um den Teil nach dem Doppelpunkt kümmern. Verwenden Sie einfach md5 ($ password) und es wird definitiv funktionieren.

Das funktioniert übrigens auch auf Joomla 3.x.

0
itoctopus
<?php
$r = bin2hex(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
$p = 'the_password';

$s = $p . $r;
$m = md5($s);

$out = $m . ':' . $r;
echo $out;

Len 16, weil bin2hex die Zeichengröße verdoppelt, da aus 1 Byte 2 Byte werden

0
user2312578