MySql Script fonctioniert nicht
Hallo ich habe hier ein script entwickelt um von 2 CMS user von einer Datenbank in die ander zu verschieben . Ich benutze als Haubt CMS Jamroom und wir wollen die User nach Joomla Kopieren das einzige Problehm ist dass Joomla ein ander crypt benutz und ich weis nich wie ich das in mein Script einbauen soll kann mir da jemand helfen?
Hier is mal mein Script
Jamroom biete ein bridge an die bei der registriereung den username automatich von jamroom nach joomla kopiert aber dies ist nur bei einer neu registrierung so da ich schon in jamroom über 400 user habe wollte ich an hander bridge ein anderer script schreiwen deen mir die actuellen user von jamroom nach joomla copiert aber da ist das MD5 Problehm was ich nicht weis wie ich es sol lösen.
dieser script hier drunter ist die bridge von Jamroom nach joomla:
Ich hoffe dass mir da jemand helfen kan.
Danke Im Vorraus
Gordon
[Edit Biber] Code-Tags nachgezogen [/Edit]
Hier is mal mein Script
<?php
// BASE DE DONNEES (A) Jamroom
$lga = ''; // LOGIN
$mpa = ''; // MOT DE PASSE
$cxa = ''; // SERVEUR
$dba = ''; // NOM DE LA BASE
$tba = 'jamroom_user'; // NOM DE LA TABLE
// BASE DE DONNEES (B) Joomla
$lgb = ''; // LOGIN
$mpb =''; // MOT DE PASSE
$cxb = ''; // SERVEUR
$dbb = 'jamroomsocial'; // BASE
$tbb = 'jos_users'; // TABLE
$i = 0; // COMMENCER DU DEBUT (RESULTAT 0)
$j = 0; // COMPTEUR DES AJOUTS
$switch = true;
echo 'Chaque point signifie un ajout d'utilisateur : ';
while($switch)
{
// CONNEXION mySQL (A)
$mca = mysql_connect($cxa, $lga, $mpa) or die('Could not connect: '.mysql_error().'<br />'.fin());
mysql_select_db($dba, $mca);
// REQUETE DE SELECTION TRIE PAR id RESULTAT PAR RESULTAT
// C EST ICI QU'ON POURRAIT AJOUTE WHERE `sync` = 0 POUR LES UTILISATEURS NON SYNCHRONISES DE (A) VERS (B)
$result = mysql_query('SELECT * FROM `'.$tba.'` ORDER BY `user_nickname` LIMIT '.$i.', 1');
// CHANGER LE $switch SI PAS DE RESULTAT => ARRETER LA BOUCLE
if(!$result)
{
mysql_close($cxa);
$switch = false;
die('ERREUR essaies ca dans phpmyadmin : <b>SELECT * FROM `'.$tba.'` ORDER BY `user_nickname` LIMIT '.$i.', 1</b>');
}
// UPLOADER RANGEE SI RESULTAT
else
{
// PASSER AU RESULTAT SUIVANTE AU PROCHAIN PASSAGE DANS LA BOUCLE while($switch)
++$i;
// RECUPERRER RANGEE
$row = mysql_fetch_assoc($result);
// EFFACER MEMOIRE mySQL
mysql_free_result($result);
mysql_close($mca);
// CONNEXION mySQL B
$mcb = mysql_connect($cxb, $lgb, $mpb) or die('Could not connect: '.mysql_error().'<br />'.fin());
mysql_select_db($dbb, $mcb);
// VERIFIER SI DONNEE EXISTE
$result = mysql_query('SELECT * FROM `'.$tbb.'` WHERE `name` = \''.$row['user_nickname'].'\'');
// AJOUTER UTILISATEUR INEXISTANT
if(!$result)
{
// ON POURRAIT CYCLER DANS CES ARRAYS POUR PARAMETRER LES TABLES
/*
$coa = array('user_fullname
', 'user_nickname', 'user_emailadr', 'user_password', 'user_band_id', 'user_created', 'user_lastlogin');
$cob = array('name', 'email', 'password', 'gid', 'registerDate', 'lastvisitDate');
// VALEURS SPECIALES
$vcb = array('usertype', 'block', 'sendEmail', 'activation', 'params');
$vab = array('Registered', 0, 0, '', '');
*/
$temp = 'INSERT INTO `'.$tbb.'` ';
$temp .= '(`name`, `username`, `email`, `password`, `gid`, `registerDate`, `lastvisitDate`, `usertype`, `block`, `sendEmail`, `activation`, `params`)';
$temp .= 'VALUES (\''.$row['user_nickname'].'\', \''.$row['user_nickname'].'\', \''.$row['user_emailadr'].'\', \''.$row['user_password'].'\', \''.$row['user_band_id'].'\', \''.date('Y-m-d H:i:s', $row['user_created']).'\', \''.date('Y-m-d H:i:s', $row['user_lastlogin']).'\', \'Registered\', 0, 0, NULL, NULL);';
// IMPRIMER ERREUR INSERTION
if(!mysql_query($temp)){ echo htmlentities($temp, ENT_QUOTES).'<br />'; }
// AJOUT OK
else
{
echo '.';
++$j;
}
}
// SI L'UTILISATEUR EXISTE else{ // TRAITEMENT D'EXCEPTION UTILISATEUR EXISTE }
mysql_close($mcb);
}
}
echo fin();
function fin()
{
global $i;
global $j;
// RESULTAT
return '<br /><b>'.$i.' utilisateurs ont été analysé !<br />'.$j.' utilisateurs ont été ajouté !</b>
<br />';
}
Jamroom biete ein bridge an die bei der registriereung den username automatich von jamroom nach joomla kopiert aber dies ist nur bei einer neu registrierung so da ich schon in jamroom über 400 user habe wollte ich an hander bridge ein anderer script schreiwen deen mir die actuellen user von jamroom nach joomla copiert aber da ist das MD5 Problehm was ich nicht weis wie ich es sol lösen.
dieser script hier drunter ist die bridge von Jamroom nach joomla:
<?php>
/**
* Joomla_15 Jamroom Bridge Plugin
* @package Talldude_Library
* @subpackage Jamroom_Bridges
* @copyright 2008 by Brian Johnson / Talldude Networks LLC
* @author Brian Johnson - bigguy@talldude.net
* @filesource
* $Id: Joomla_15.php,v 1.2 2008-07-16 21:21:04 bigguy Exp $
*/
defined('IN_JAMROOM') or exit();
//------------------------------------------------------------
// configuration
//------------------------------------------------------------
$GLOBALS['joomla_15']['server'] = ''; // machine Joomla is running on
$GLOBALS['joomla_15']['dbname'] = 'jamroomsocial'; // Joomla Database name
$GLOBALS['joomla_15']['dbuser'] = 'jamroomsocial'; // database user name
$GLOBALS['joomla_15']['dbpass'] = ''; // database user password
$GLOBALS['joomla_15']['prefix'] = 'jos_'; // default Joomla_15 table prefix
$GLOBALS['joomla_15']['user_type'] = 'Registered'; // Name of User Group Joomla_15
//------------------------------------------------------------
// You should not need to edit below here
//------------------------------------------------------------
/**
* The jrBridge_check function is used before the "create" function
* as a way to "precheck" the Joomla_15 forum and see if a user account
* name already exists - this allows an error to be returned in
* Jamroom so name duplication does not occur.
*
* @param array Incoming array of User Info
*
* @return bool Returns true/false on success/fail
*/
function jrBridge_Joomla_15_check($_data)
{
// Verify we recieved our input array
if (!is_array($_data)) {
return('ERROR: jrBridge_create() Input _data array is empty!');
}
// Now connect up to the Joomla_15 database and do our work
$con = jrBridge_Joomla_15_connect();
if (!is_resource($con)) {
return("ERROR: unable to open the Joomla_15 database - MySQL error: {$con}");
}
$user = dbEscapeString($_data['user_nickname']);
// check to see if the user account already exists
$req = "SELECT username
FROM {$GLOBALS['joomla_15']['prefix']}users
WHERE username = '{$user}'";
$res = mysql_query($req,$con);
if (mysql_num_rows($res) > 0) {
return("ERROR: username {$user} already exists in Joomla_15 user table!");
}
return(true);
}
/**
* The jrBridge_create function is used for "creating" a new
* entry in the Joomla_15 forum.
*
* @param array Incoming array of User Info
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_create($_data)
{
// Verify we recieved our input array
if (!is_array($_data)) {
return('ERROR: jrBridge_create() Input _data array is empty!');
}
// our user password comes in unencrypted - lets MD5 it
$salt = md5(microtime());
$pass = md5($_data['user_password'] . $salt);
$user = dbEscapeString($_data['user_nickname']);
if (isset($_data['user_fullname']) && strlen($_data['user_fullname']) > 0) {
$full = dbEscapeString($_data['user_fullname']);
}
else {
$full = $user;
}
$mail = dbEscapeString($_data['user_emailadr']);
// Now connect up to the Joomla_15 database and do our work
$con = jrBridge_Joomla_15_connect();
if (!is_resource($con)) {
return("ERROR: unable to open the Joomla_15 database - MySQL error: {$con}");
}
// First we want to figure out our GID from the jos_core_acl_aro_groups table
$req = "SELECT id
FROM {$GLOBALS['joomla_15']['prefix']}core_acl_aro_groups
WHERE name = '". dbEscapeString($GLOBALS['joomla_15']['user_type']) ."'
LIMIT 1";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_num_rows($res) > 0) {
$_row = mysql_fetch_assoc($res);
$ugid = $_row['id'];
}
mysql_free_result($res);
if (isset($err) && !is_numeric($ugid)) {
mysql_close($con);
return("ERROR: unable to determine the correct GID value for users in the core_acl_aro_groups table {$err}");
}
// Insert our User account
$req = "INSERT INTO {$GLOBALS['joomla_15']['prefix']}users (name,username,email,password,usertype,gid,registerDate,lastvisitDate)
VALUES ('{$full}','{$user}','{$mail}','{$pass}:{$salt}','". dbEscapeString($GLOBALS['joomla_15']['user_type']) ."','{$ugid}','". strftime('%Y-%m-%d %H:%M:%S') ."','". strftime('%Y-%m-%d %H:%M:%S') ."')";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con)) {
$usid = mysql_insert_id($con);
}
else {
mysql_close($con);
return("ERROR: failed to insert new user into the Joomla_15 user table - MySQL error: {$err}");
}
// Add to core_acl_aro table
$req = "INSERT INTO {$GLOBALS['joomla_15']['prefix']}core_acl_aro (section_value,value,name)
VALUES ('users','{$usid}','{$full}')";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con)) {
$arid = mysql_insert_id($con);
}
else {
mysql_close($con);
return("ERROR: failed to insert new user into the Joomla_15 core_acl_aro table - MySQL error: {$err}");
}
// Add to core_acl_groups_aro_map table
$req = "INSERT INTO {$GLOBALS['joomla_15']['prefix']}core_acl_groups_aro_map (group_id,aro_id)
VALUES ('{$ugid}','{$arid}')";
mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (isset($err)) {
mysql_close($con);
return("ERROR: failed to insert new user_id into the Joomla_15 core_acl_groups_aro_map table - MySQL error: {$err}");
}
mysql_close($con);
return(true);
}
/**
* The jrBridge_create function is used for "creating" a new
* entry in the Joomla_15 forum.
*
* @param array Incoming array of User Info
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_update($_data)
{
// Verify we recieved our input array
if (!is_array($_data)) {
return('ERROR: jrBridge_create() Input _data array is empty!');
}
// Now connect up to the Joomla_15 database and do our work
$con = jrBridge_Joomla_15_connect();
if (!is_resource($con)) {
return("ERROR: unable to open the Joomla_15 database - MySQL error: {$con}");
}
// Update User account
$req = "UPDATE {$GLOBALS['joomla_15']['prefix']}users SET ";
if (isset($_data['user_password']) && strlen($_data['user_password']) > 0) {
$sal = md5(microtime());
$req .= "password = '". md5($_data['user_password'] . $sal) .':'. $sal ."',
email = '". dbEscapeString($_data['user_emailadr']) ."' ";
}
else {
$req .= "email = '". dbEscapeString($_data['user_emailadr']) ."' ";
}
$req .= "WHERE username = '". dbEscapeString($_data['user_nickname']) ."'
LIMIT 1";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con) == 0) {
mysql_close($con);
return("ERROR: failed to update user {$_data['user_nickname']} in Joomla_15 user table - MySQL error: {$err}");
}
mysql_close($con);
return(true);
}
/**
* The jrBridge_delete function is used for "deleting" an entry
* in the Joomla_15 forum.
*
* @param string Username to remove from forum
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_delete($_data)
{
// Verify we recieved our input array
if (!is_array($_data)) {
return('ERROR: jrBridge_delete() Input _data array is empty!');
}
// Now connect up to the Joomla_15 database and do our work
$con = jrBridge_Joomla_15_connect();
if (!is_resource($con)) {
return("ERROR: unable to open the Joomla_15 database - MySQL error: {$con}");
}
// First we want to figure out our GID from the jos_core_acl_aro_groups table
$req = "SELECT id
FROM {$GLOBALS['joomla_15']['prefix']}users
WHERE username = '". dbEscapeString($_data['user_nickname']) ."'
LIMIT 1";
$res = mysql_query($req,$con);
if (mysql_num_rows($res) > 0) {
$_row = mysql_fetch_assoc($res);
$usid = $_row['id'];
}
mysql_free_result($res);
// Delete User account
$req = "DELETE FROM {$GLOBALS['joomla_15']['prefix']}users
WHERE id = '{$usid}'
LIMIT 1";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con) == 0) {
mysql_close($con);
return("ERROR: failed to delete user {$_data['user_nickname']} from Joomla_15 user table - MySQL error: {$err}");
}
// Next, get our core_acl_aro value
$req = "SELECT aro_id
FROM {$GLOBALS['joomla_15']['prefix']}core_acl_aro
WHERE value = '{$usid}'
LIMIT 1";
$res = mysql_query($req,$con);
if (mysql_num_rows($res) > 0) {
$_row = mysql_fetch_assoc($res);
$arid = $_row['aro_id'];
}
mysql_free_result($res);
// Delete from core_acl_aro
$req = "DELETE FROM {$GLOBALS['joomla_15']['prefix']}core_acl_aro
WHERE value = '{$usid}'
LIMIT 1";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con) == 0) {
mysql_close($con);
return("ERROR: failed to delete value {$usid} from Joomla_15 core_acl_aro table - MySQL error: {$err}");
}
// Delete from core_acl_groups_aro_map
$req = "DELETE FROM {$GLOBALS['joomla_15']['prefix']}core_acl_groups_aro_map
WHERE aro_id = '{$arid}'
LIMIT 1";
$res = mysql_query($req,$con) or $err = mysql_errno() ."-". mysql_error();
if (mysql_affected_rows($con) == 0) {
mysql_close($con);
return("ERROR: failed to delete aro_id {$arid} from Joomla_15 core_acl_groups_aro_map table - MySQL error: {$err}");
}
mysql_close($con);
return(true);
}
/**
* The jrBridge_test function is used for "testing" the Bridge Plugin.
* Any "checks" can be added to this function
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_test()
{
// Test Database connection
$con = jrBridge_Joomla_15_connect();
if (!is_resource($con)) {
return("ERROR: unable to open the Joomla_15 database - MySQL error: {$con}");
}
// Test incremental USER ID select
$req = "SELECT id FROM {$GLOBALS['joomla_15']['prefix']}users LIMIT 1";
$res = mysql_query($req,$con);
if (mysql_num_rows($res) == 0) {
return("ERROR: unable to determine the incremental user_id value from Joomla_15 - verify database connectivity");
}
mysql_close($con);
return(true);
}
/**
* The jrBridge_login function is executed upon a successful login by
* a Jamroom User Account.
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_login($_data)
{
return(true);
}
/**
* The jrBridge_logout function is executed upon a successful logout by
* a Jamroom User Account.
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_logout($_data)
{
return(true);
}
/**
* The jrBridge_create function is used for "creating" a new
* entry in the Joomla_15 forum.
*
* @param array Incoming array of User Info
*
* @return mixed Returns error string on failure, bool true on success
*/
function jrBridge_Joomla_15_connect()
{
// Now connect up to the Joomla_15 database and do our work
$con = mysql_connect($GLOBALS['joomla_15']['server'],$GLOBALS['joomla_15']['dbuser'],$GLOBALS['joomla_15']['dbpass']) or $err = mysql_errno() .' - '. mysql_error();
if (isset($err)) {
return('Invalid MySQL Server Name, Username or Password');
}
mysql_select_db($GLOBALS['joomla_15']['dbname'],$con) or $err = mysql_errno() .' - '. mysql_error();
if (isset($err)) {
return('Invalid MySQL Database');
}
return($con);
}
?>
Ich hoffe dass mir da jemand helfen kan.
Danke Im Vorraus
Gordon
[Edit Biber] Code-Tags nachgezogen [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122786
Url: https://administrator.de/contentid/122786
Ausgedruckt am: 05.11.2024 um 16:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
wie speichert Jamroom denn die Passwörter? Das ganze wird in drei Fällen funktionieren:
1. Jamroom speichern die Passwörter unverschlüsselt - dann kannst du die Funktion wie im Import-Skript zusammensetzen. Aus Security-Gründen ziemlich unwahrscheinlich
2. Jamroom speichert die Passwörter mit einer umkehrbahren Verschlüsselung - letztlich das gleiche wie 1.
3. Jamroom verwendet exakt das gleiche Format wie Joomla. Dann kannst du sie einfach umkopieren. Eigentlich nicht unwahrscheinlich, aber das solltest du schon probiert haben.
Ansonsten: Hash-Strings kann man nicht einfach ineinander umwandeln...
Such dir den PHP-Code raus, wie Jamroom ein Passwort abspeichert, wenn man es ändert (oder einen neuen Nutzer anlegt). Vergleiche das mit dem hier geposteten Skript.
Gruß
Filipp
PS: Es gibt sogar noch einen 4. Fall: Jamroom nimmt einen immer gleich bleibenden Salt. Dann hängst du an das in der DB gespeicherte Passwort einfach : und diesen Salt an und kannst ihn so in die Joomla-DB schreiben.
wie speichert Jamroom denn die Passwörter? Das ganze wird in drei Fällen funktionieren:
1. Jamroom speichern die Passwörter unverschlüsselt - dann kannst du die Funktion wie im Import-Skript zusammensetzen. Aus Security-Gründen ziemlich unwahrscheinlich
2. Jamroom speichert die Passwörter mit einer umkehrbahren Verschlüsselung - letztlich das gleiche wie 1.
3. Jamroom verwendet exakt das gleiche Format wie Joomla. Dann kannst du sie einfach umkopieren. Eigentlich nicht unwahrscheinlich, aber das solltest du schon probiert haben.
Ansonsten: Hash-Strings kann man nicht einfach ineinander umwandeln...
Such dir den PHP-Code raus, wie Jamroom ein Passwort abspeichert, wenn man es ändert (oder einen neuen Nutzer anlegt). Vergleiche das mit dem hier geposteten Skript.
Gruß
Filipp
PS: Es gibt sogar noch einen 4. Fall: Jamroom nimmt einen immer gleich bleibenden Salt. Dann hängst du an das in der DB gespeicherte Passwort einfach : und diesen Salt an und kannst ihn so in die Joomla-DB schreiben.
Hallo
Das Problem an der Sache ist, dass normalerweise die Passwörter verschlüsselt gespeichert werden und zwar so das sie nur verschlüsselt werden können aber nicht mehr entschlüsselt.
Das leider zimmlich sicher Jamroon und Joomla ihre Passwörter nicht gleich verschlüsseln. Daher kannst du die Benutzer nicht einfach so kopieren.
Mir kommt da nur eine Variante in den Sinn:
Und zwar kannst du das Loginscript so abändern das nach der Passwort überprüfen du das eingegeben Passwort (also das unverschlüsselte - wenn du da irgendwie ran kommst) nehmen und dies im Joomla Standart verschlüsseln und in die Joomla Tabelle abspeichern.
Ob es möglich ist an das unverschlüsselte Passwort bei der Passwort überprüfung ranzukommen weiss ich nicht. Geschweige denn ob es dir möglich ist das Loginscript so abzuändern.
Es ist jeglich eine Idee von mir, ist ungetestet!
Grüsse
scan
Das Problem an der Sache ist, dass normalerweise die Passwörter verschlüsselt gespeichert werden und zwar so das sie nur verschlüsselt werden können aber nicht mehr entschlüsselt.
Das leider zimmlich sicher Jamroon und Joomla ihre Passwörter nicht gleich verschlüsseln. Daher kannst du die Benutzer nicht einfach so kopieren.
Mir kommt da nur eine Variante in den Sinn:
Und zwar kannst du das Loginscript so abändern das nach der Passwort überprüfen du das eingegeben Passwort (also das unverschlüsselte - wenn du da irgendwie ran kommst) nehmen und dies im Joomla Standart verschlüsseln und in die Joomla Tabelle abspeichern.
Ob es möglich ist an das unverschlüsselte Passwort bei der Passwort überprüfung ranzukommen weiss ich nicht. Geschweige denn ob es dir möglich ist das Loginscript so abzuändern.
Es ist jeglich eine Idee von mir, ist ungetestet!
Grüsse
scan
Hallo,
vielleicht mal zu den Grundlagen:
Passwörter werden oft MD5-verschlüsselt gespeichert. MD5 ist ein sog. "Hash-Verfahren". Es basiert daraus, das aus jeder eingabe ein bestimmter (immer gleicher String) wird. Aber: Es ist nicht möglich aus diesem String (dem MD5-"Verschlüsselten" Kennwort) wieder den Klartext-String zu berechnen. D.h. auch ein bösartiger Mensch, der Zugriff auf die Kennwort-DB hat kann die Originalkennwörter nicht erlangen. Wenn sich ein Nutzer authentifizieren will, dann gibt er sein Kennwort ein. Dieses wird dann auch md5-verschlüsselt, und mit dem gespeicherten, verschlüsselten verglichen. Wenn sie gleich sind, war es wohl das richtige Kennwort. So weit, so gut.
Es gibt also zwei wichtige Eigenschaften:
1. wenn ich auf Text "abc" den md5-Algorithmus anwende, dann kommt immer der gleiche Wert heraus, sagen wir "X55FG". Kurz md5("abc") = "X55FG"
2. Aus dem Ergebnis der md5-Funktion kann ich den Ausgangswert nicht mehr errechnen. Es gibt also keine Funktion re-md5("X55FG") = "abc".
Das Problem: wir benötigen die in 2. angesprochene Funktion re-md5() gar nicht unbedingt: Wir wissen doch, dass "X55FG" entsteht, wenn ich "abc" eingebe. Und wir können uns eine riesige Liste aufbauen, in der für möglichst viele md5-verschlüsselte Strings steht, wie sein Ausgangswert ist (eine sog. "Rainbow Table"). Diese List wird niemals vollständig sein, dafür gibt es zu viele Möglichkeiten. Aber man kann einfach mal mit einem Wörterbuch anfangen.
Um das abzuwehren wird in vielen Fällen dem Original-Kennwort vor der Verschlüsselung ein sog. "Salt" angehängt.
Joomla verwendet für jedes Passwort einen eigenen Salt und speichert zusammen mit dem Passwort, wie dieser ist
Jamroom verwendet afaik auch md5 für die Kennwortspeicherung. Die Frage ist nur, wieder Salt ist. Wenn du den kennst kannst du ihn einfach an das Pwd aus der DB anhängen, und dann wird es wahrscheinlich auch funktionieren. Wie er ist findest du heraus, wenn du dir anschaust, wie Jamroom die Pwds speichert. Wahrscheinlich ist der Salt für alle Pwd gleich und steht irgendwo in einer globalen Variable.
Gruß
Filipp
vielleicht mal zu den Grundlagen:
Passwörter werden oft MD5-verschlüsselt gespeichert. MD5 ist ein sog. "Hash-Verfahren". Es basiert daraus, das aus jeder eingabe ein bestimmter (immer gleicher String) wird. Aber: Es ist nicht möglich aus diesem String (dem MD5-"Verschlüsselten" Kennwort) wieder den Klartext-String zu berechnen. D.h. auch ein bösartiger Mensch, der Zugriff auf die Kennwort-DB hat kann die Originalkennwörter nicht erlangen. Wenn sich ein Nutzer authentifizieren will, dann gibt er sein Kennwort ein. Dieses wird dann auch md5-verschlüsselt, und mit dem gespeicherten, verschlüsselten verglichen. Wenn sie gleich sind, war es wohl das richtige Kennwort. So weit, so gut.
Es gibt also zwei wichtige Eigenschaften:
1. wenn ich auf Text "abc" den md5-Algorithmus anwende, dann kommt immer der gleiche Wert heraus, sagen wir "X55FG". Kurz md5("abc") = "X55FG"
2. Aus dem Ergebnis der md5-Funktion kann ich den Ausgangswert nicht mehr errechnen. Es gibt also keine Funktion re-md5("X55FG") = "abc".
Das Problem: wir benötigen die in 2. angesprochene Funktion re-md5() gar nicht unbedingt: Wir wissen doch, dass "X55FG" entsteht, wenn ich "abc" eingebe. Und wir können uns eine riesige Liste aufbauen, in der für möglichst viele md5-verschlüsselte Strings steht, wie sein Ausgangswert ist (eine sog. "Rainbow Table"). Diese List wird niemals vollständig sein, dafür gibt es zu viele Möglichkeiten. Aber man kann einfach mal mit einem Wörterbuch anfangen.
Um das abzuwehren wird in vielen Fällen dem Original-Kennwort vor der Verschlüsselung ein sog. "Salt" angehängt.
$pass = md5($_data['user_password'] . $salt);
Statt md5("abc") mache ich also md5("abc"+"IK3F6S"). Warum? Weil "abc" bestimmt in vielen Tabellen enthalten sein wird. "abcIK3F6S" aber bestimmt nicht. D.h. ich bekomme einen Wert heraus, für den in keiner Tabelle steht, wie die Eingabe war.Joomla verwendet für jedes Passwort einen eigenen Salt und speichert zusammen mit dem Passwort, wie dieser ist
$req = "INSERT INTO ...users (name,username,email,password,usertype,gid,registerDate,lastvisitDate) VALUES (...,'{$pass}:{$salt}',...
Im Beispiel stünde in der DB etwa FEIX3H:IK3F6S.Jamroom verwendet afaik auch md5 für die Kennwortspeicherung. Die Frage ist nur, wieder Salt ist. Wenn du den kennst kannst du ihn einfach an das Pwd aus der DB anhängen, und dann wird es wahrscheinlich auch funktionieren. Wie er ist findest du heraus, wenn du dir anschaust, wie Jamroom die Pwds speichert. Wahrscheinlich ist der Salt für alle Pwd gleich und steht irgendwo in einer globalen Variable.
Gruß
Filipp
Hallo,
der von dir gepostete Code-Abschnitt enthält scheinbar nicht alle relevanten Schritte. Und ehrlich gesagt habe ich keine Lust, mich durch seitenweise Code zu ackern, um deine Probleme zu lösen.
Zwei Tips:
1. Füge als Joomla-Passwort mal 86160309721f82b0e39d40b456af33f8: ein - also das von dir gepostete Jamroom-Passwort, nur mit einem : angehängt. Vielleicht funktioniert das
2. Frage in einem speziellen Jamroom-Forum.
Gruß
Filipp
der von dir gepostete Code-Abschnitt enthält scheinbar nicht alle relevanten Schritte. Und ehrlich gesagt habe ich keine Lust, mich durch seitenweise Code zu ackern, um deine Probleme zu lösen.
Zwei Tips:
1. Füge als Joomla-Passwort mal 86160309721f82b0e39d40b456af33f8: ein - also das von dir gepostete Jamroom-Passwort, nur mit einem : angehängt. Vielleicht funktioniert das
2. Frage in einem speziellen Jamroom-Forum.
Gruß
Filipp