Kundenpassworter aus Xtc Fork gesalzen

Hallo zusammen

Vielleicht hat mir hier jemand einen Tipp. Programmieren kann ich leider nicht. Trotzdem versuche ich irgendwie die Kundenpasswörter aus meinem alten xtc Fork System (webs.de) so zu importieren, damit meine Kunden im neuen Shop wieder einloggen können. Der Migrationsassistent hat die Kundendaten zwar importiert, doch leider funktioniert es mit dem einloggen nicht. Da die Passwörter meines bisherigen Systems im Format md5 + Salt dargestellt werden, müsste ich den Encoder vermutlich entsprechend anpassen. Hat mir da jemand einen Tipp wie ich da vorgehen muss?

Die Passwörter in meinem bisherigen System wurden in folgender Datei generiert:

= 13) {
    $methods = array(
      'CRYPT_SHA512' => '$6$%16.16s$',
      'CRYPT_SHA256' => '$5$%16.16s$',
      'CRYPT_BLOWFISH' => '$2a$07$%22.22s$',
      'CRYPT_MD5' => '$1$%12.12s$',
      'CRYPT_EXT_DES' => '%9.9s',
      'CRYPT_STD_DES' => '%2.2s',
    );

    // this salt, generated by md5 from time and Pid is good enough for us:
    $salt = md5(time().getMyPid());

    foreach($methods as $method => $hash) {
      if (defined($method) and constant($method) == 1) {
        $hash = sprintf($hash, $salt);
        $password = NULL;
        // found a method to use:
        if (function_exists('pcntl_fork') && function_exists('posix_kill')) {
          $pid = pcntl_fork();

          if ($pid == -1) {
            $password = crypt($plain, $hash);
          } elseif ($pid) {
            pcntl_wait($status); // prevent from zombies

            // check if the child terminates by SIGUSR1 what we expect
            if (pcntl_wifsignaled($status) and pcntl_wtermsig($status) == SIGUSR1) {
              // we could process the crypt
              $password = crypt($plain, $hash);
            }
          } else {
            register_shutdown_function(create_function(NULL, 'posix_kill(getmypid(), SIGUSR1);'));
            $password = crypt($plain, $hash); // on error this cause a SIGSEGV
            exit(0);
          }
        } else {
          $password = crypt($plain, $hash);
        }

        // verify the encryption:
        if ($password !== NULL and crypt($plain, $password) == $password) {
          break;
        } else {
          $password = NULL;
        }
      }
    }
  }

  // fallback to old method
  if (empty($password)) {
    $password=md5($plain);
  }

  return $password;
}
 ?>

 

Hi,

schwer einzuschätzen. Grundsätzlich ist es so, dass wir neben dem Standard Bcrypt auch MD5 + Hash auch unterstützen (gerade wegen Migrationen). Da wäre also die Frage, was in der s_user-Tabelle konkret drin steht. Im Idealfall wurde “md5” als Encoder bereits erkannt und korrekt eingetragen. Da kannst du am besten eben schauen, was da eingetragen wurde als Encoder und Passwort.

Im MigrationsTool gibt es darüber hinaus auch einen “md5reversed” Encoder - für Shops, bei denen das Salt dem Passworthash vorangestellt ist, vgl. SwagMigration/Md5Reversed.php at master · shopwareLabs/SwagMigration · GitHub

Theoretisch kann dein Shop ja anscheinend auch andere Passwörter generieren, d.h. nach einer Migration auf einen anderen Server / Update von PHP könnte dein Shop theoretisch angefangen haben, SHA-Hashes zu generieren (so wie ich das der oben stehenden Logik entnehme). Das macht natürlich die Migration zu Shopware auch nicht unbedingt leichter

Besten Gruß

Daniel

 

 

Wenn das mal überhaupt geht. Blende doch einfach beim Login ein, dass Kunden mit der Passwort Zurücksetzen Funktion ein neues sich vergeben lassen können.

Geht eben auch nicht. Egal ob sich ein User anmelden möchte oder ein neues Passwort verlangt, ich erhalte die folgende Fehlermeldung:

Invalides Formular-Token!

Die Aktion konnte aufgrund eines invaliden Formular-Tokens nicht durchgeführt werden.
Ein neues Token wurde bereits generiert.

Bitte gehen Sie in Ihrem Browser eine Seite zurück und starten die Aktion erneut.

 

Kann auch am Browser-Cache liegen. Den mal komplett löschen.

Meine Lösung damals war überigens folgende. Der eingetragene Encoder MD5 musste ich in bcrypt ändern. Der MySql Befehl welcher somit den Fehler korrigierte lautete:

UPDATE s_user SET encoder=“bcrypt” WHERE encoder=“MD5”