# CSV Import Kunden - Passwort?

**URL:** <https://forum.shopware.com/t/csv-import-kunden-passwort/68193>\
**Category:** Allgemein\
**Created:** [7. Juli 2020 um 12:18 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193 "2020-07-07T12:18:40Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [7. Juli 2020 um 12:18 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/1 "2020-07-07T12:18:40Z")

</div>

gibt es keine Möglichkeit, Kunden inkl. Passwort über CSV zu importieren?

offenbar nicht…

wie bekomm ich sie dann rein? Kann ich manuelle SQL Inserts dafür ausführen? Wie mach ich das mit dem Passwort? Ist das bei Shopware 6 MD5?

---

<div class="post-metadata">

**Author:** ![FormatC](https://avatars.discourse-cdn.com/v4/letter/f/4bbf92/32.png) [@FormatC](https://forum.shopware.com/u/FormatC)\
**Post date:** [22. Juli 2020 um 13:41 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/2 "2020-07-22T13:41:06Z")

</div>

Das würde ich auch gerne wissen! Jemand eine Antwort für @FloC3‍ und mich!?

---

<div class="post-metadata">

**Author:** ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)\
**Post date:** [23. Juli 2020 um 06:01 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/3 "2020-07-23T06:01:40Z")

</div>

MD5 würde man natürlich heute nicht mehr benutzen, dass ist ja schon seit Jahren unsicher. Bei Passwörtern wird folgende Funktion von PHP genutzt, die entscheidet dynamisch, welcher Algorithmus genutzt wird:&nbsp;[https://www.php.net/manual/de/function.password-hash.php](https://www.php.net/manual/de/function.password-hash.php)

Ein Import per CSV ist nicht möglich, wenn müsste man diese manuell ins System übernehmen. Shopware bietet hier eine Spalte “Legacy\_password” in der user-Tabelle die für nicht-sichere Passwörter gedacht ist, dort muss man dann auch einen Encoder übergeben. Beim nächsten Login des Kunden wir das Passwort dann in den neuen Algorithmus überführt. Wenn ein Encoder genutzt wird, den Shopware nicht kennt, muss man natürlich einen neuen im System verfügbar machen.

---

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [23. Juli 2020 um 07:14 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/4 "2020-07-23T07:14:38Z")

</div>

Hi [@Moritz Naczenski]([http://forum.shopware.com/profile/14574/Moritz](http://forum.shopware.com/profile/14574/Moritz) Naczenski “Moritz Naczenski”)‍,

was würde man in der Encoder-Spalte dann für das Legacy-Passwort angeben? Einfach string “md5” ?

---

<div class="post-metadata">

**Author:** ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)\
**Post date:** [23. Juli 2020 um 07:30 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/5 "2020-07-23T07:30:41Z")

</div>

Hier wird das ja auch in unserem Migrationstool gemacht:&nbsp;[https://github.com/shopware/SwagMigrationAssistant/blob/21906ccd9173b0ceb90ab7aaa6b6ce08ba799e35/Profile/Shopware/Converter/CustomerConverter.php#L308](https://github.com/shopware/SwagMigrationAssistant/blob/21906ccd9173b0ceb90ab7aaa6b6ce08ba799e35/Profile/Shopware/Converter/CustomerConverter.php#L308)

Da ist legacyEncoder soweit ich sehe Md5&nbsp;(erster Buchstabe uppercase)

---

<div class="post-metadata">

**Author:** ![kissinger](https://avatars.discourse-cdn.com/v4/letter/k/e480ec/32.png) [@kissinger](https://forum.shopware.com/u/kissinger)\
**Post date:** [15. August 2020 um 14:35 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/6 "2020-08-15T14:35:05Z")

</div>

Hallo!

Ich möchte Kundendaten aus Shopware 4.3.4 nach Shopware 6.3.1 übernehmen.

In Shopware 4 werden die Passwörter entweder als „md5“ oder „bcrypt“ gespeichert.&nbsp;

Zum Testen habe ich ein Passwort mit md5 verschlüsselt, in das Feld „legacy\_password“ das verschlüsselte Passwort eingetragen und in „legacy\_encoder“ den Wert „Md5“.

Nach erfolgreichem Import des Test-Datensatzes konnte ich mich als dieser Testkunde einloggen. Vorher hatte ich „md5“ und „MD5“ probiert, das schluf fehl.

Das System hat wie erwartet die beiden legacy-Felder gelöscht und unter „password“ ein neues Passwort generiert.

Ich hatte mich ausgeloggt und wieder eingeloggt, erfolgreich.

Welchen Wert muss ich nun in das Feld&nbsp;&nbsp;„legacy\_encoder“ eintragen, um diese Funktion auch für die „bcrypt“ - Kunden bereitzustellen?

Vielen Dank!

---

<div class="post-metadata">

**Author:** ![Rebecca\_Lesting](https://avatars.discourse-cdn.com/v4/letter/r/74df32/32.png) [@Rebecca\_Lesting](https://forum.shopware.com/u/Rebecca_Lesting)\
**Post date:** [24. August 2020 um 16:10 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/7 "2020-08-24T16:10:46Z")

</div>

Hi,&nbsp;

das Problem hatte ich gerade auch… 😉 Bei Passwörtern mit dem Encoder „bcrypt“ kannst du sie direkt in den Wert für „password“ eintragen. „legacy\_encoder“ und „legacy\_password“ sind an dieser Stelle nicht notwendig.&nbsp;

---

<div class="post-metadata">

**Author:** ![gschach](https://avatars.discourse-cdn.com/v4/letter/g/b9e5f3/32.png) [@gschach](https://forum.shopware.com/u/gschach)\
**Post date:** [26. August 2021 um 17:35 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/8 "2021-08-26T17:35:45Z")

</div>

Hallo,

wir bereiten die Migration von Kundendaten aus einem Woocommerce-Shop zu Shopware 6.4 vor.  
Das Decodieren und Codieren der Passwörter auf SW6 beim Import ist fehleranfällig.

Daher favorisieren wir, die Kunden entweder beim Login oder per Serienmail zur Vergabe eines neuen Passworts aufzufordern. Können wir hierfür z.B. auf die Funktion „Passwort reset“ zugreifen? Allen Kunden diese Mail zusenden und zum Rücksetzen des Passworts auffordern?

Oder habt Ihr Ansätze für eine andere Lösung?

Gruß Gabi

---

<div class="post-metadata">

**Author:** ![FragenAnsForum](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/fragenansforum/32/7849_2.png) [@FragenAnsForum](https://forum.shopware.com/u/FragenAnsForum)\
**Post date:** [27. August 2021 um 07:02 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/9 "2021-08-27T07:02:16Z")

</div>

Hi Gabi,

wir sind von Gambio migriert - anstatt Mails zu verschicken, gab es für Kunden beim Besuch der Website einen Block „~ Herzlich willkommen beim Neuen Shop! Technisch erforderlich: neues Passwort anfordern“. Es klappte

Bye

Michael

---

<div class="post-metadata">

**Author:** ![gschach](https://avatars.discourse-cdn.com/v4/letter/g/b9e5f3/32.png) [@gschach](https://forum.shopware.com/u/gschach)\
**Post date:** [7. September 2021 um 13:52 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/10 "2021-09-07T13:52:25Z")

</div>

Hallo Michael,

danke für die Idee. Das werden wir auch so ausführen und einen Block anzeigen.

Viele Grüße  
Gabi

---

<div class="post-metadata">

**Author:** ![Plotec](https://avatars.discourse-cdn.com/v4/letter/p/c4cdca/32.png) [@Plotec](https://forum.shopware.com/u/Plotec)\
**Post date:** [8. September 2021 um 07:22 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/11 "2021-09-08T07:22:17Z")

</div>

Passwörter die mit bcrypt codiert sind können direkt als „password“ in die CVS eingetragen werden. Da muss nichts decodiert oder codiert werden. Funktioniert bei uns problemlos ohne Fehler.

---

<div class="post-metadata">

**Author:** ![Garyson](https://avatars.discourse-cdn.com/v4/letter/g/8c91f0/32.png) [@Garyson](https://forum.shopware.com/u/Garyson)\
**Post date:** [9. November 2021 um 17:23 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/12 "2021-11-09T17:23:41Z")

</div>

Servus @Moritz_Naczenski,

in welchem Format müssen MD5 und Salz im Feld legacy\_passwort stehen?

Ungesalzen klappt der Login mit dem Passwort _Joshua_  
legacy\_password: 85b103482a20682da703aa388933a6d8  
legacy\_encoder: Md5

Ist das Passwort gesalzen (s0mRIdlKvI) will es aber nicht funktionieren.  
legacy\_password: 9cb7111c33a857d7f951dd1fa2760db4:s0mRIdlKvI  
legacy\_encoder: Md5

Mit Blick in die Md5.php hätte ich vermutet, dass MD5 und Salt durch einen Doppelpunkt getrennt im Feld stehen müssen.

Was mache ich hier falsch?

Gruß  
Gary

---

<div class="post-metadata">

**Author:** ![zirkeldesign](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/zirkeldesign/32/14671_2.png) [@zirkeldesign](https://forum.shopware.com/u/zirkeldesign)\
**Post date:** [22. Dezember 2021 um 13:03 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/13 "2021-12-22T13:03:21Z")

</div>

Hej,

der Import von `md5` codierten Passwörter funktionierte bei uns auch ohne Probleme.

Allerdings liegen in den Altdaten auch neuere Passwörter in `bcrypt` vor. Und zwar mit dem `$2a$` Prefix und Faktor `8`. Obwohl diese im Feld `password` liegen, werden sie beim Import noch einmal (um)codiert (mit `$2y$10`) und führen somit dazu, dass man sich mit den Daten nicht mehr anmelden kann.

Leider habe ich noch nicht den Punkt zurückverfolgen können, an welchem dies passiert. Legt man die Hashes direkt in die DB, ist ein Anmelden korrekt möglich.

---

<div class="post-metadata">

**Author:** ![Plotec](https://avatars.discourse-cdn.com/v4/letter/p/c4cdca/32.png) [@Plotec](https://forum.shopware.com/u/Plotec)\
**Post date:** [22. Dezember 2021 um 13:54 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/14 "2021-12-22T13:54:17Z")

</div>

Shopware 5 Passwörter können vom SW 5 Export direkt in das Feld „password“ der SW 6 Import-Datei übernommen werden. Die liegen schon in bcrypt vor.

Wie das bei Shopware 4 exporten aussieht weiß ich nicht. SW 4 habe ich nie benutzt. Vermute aber mal die waren nur MD5 verschlüsselt.

---

<div class="post-metadata">

**Author:** ![zirkeldesign](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/zirkeldesign/32/14671_2.png) [@zirkeldesign](https://forum.shopware.com/u/zirkeldesign)\
**Post date:** [22. Dezember 2021 um 14:00 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/15 "2021-12-22T14:00:52Z")

</div>

Moin @Plotec,

die bisherigen Passwörter / Daten stammen aus keinem Shopware System sondern aus modified. Dort wurde irgendwann (glücklicherweise) von `md5` auf `bcrypt` umgestellt - allerdings mit einer selbstgeschriebenen Methode. Und diese setzt als Algorithmus ID `$2a$` voran und nutzt `8` als cost factor - was meines Wissens eher aus der Ruby Welt kommt.

Somit habe ich es leider noch nicht hinbekommen, diese Passwörter zu übernehmen.

* * *

Ich habe es nun über einen eigenen `LegacyEncoder` gelöst. Somit umgeht man das Rehashing beim Import - und bei Login wird das Password dann „korrigiert“.

---

<div class="post-metadata">

**Author:** ![annchen](https://avatars.discourse-cdn.com/v4/letter/a/b9bd4f/32.png) [@annchen](https://forum.shopware.com/u/annchen)\
**Post date:** [11. Februar 2022 um 09:52 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/16 "2022-02-11T09:52:52Z")

</div>

Hat schon jemand versucht aus Oxid Passwörter zu importieren? Die sind Md5 codiert und gesalzen.  
Die neueren sind ggf. auch schon bcrypt codiert und gesalzen.  
Es gibt zwei Spalten in der Datenbank: oxpassword und oxpasssalt.  
Alle meine Versuche sind bisher gescheitert.  
Hat jemand eine Idee dazu?

---

<div class="post-metadata">

**Author:** ![Angeal](https://avatars.discourse-cdn.com/v4/letter/a/7ab992/32.png) [@Angeal](https://forum.shopware.com/u/Angeal)\
**Post date:** [7. November 2023 um 12:20 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/17 "2023-11-07T12:20:20Z")

</div>

Hi,  
wir stehen auch vor einem Wechsel von modified zu Shopware 6.  
Darf ich deinen LegacyEncoder eventuell dafür anfragen oder fragen wie genau du das mit den Kennwörtern gemacht hast? 🙂

---

<div class="post-metadata">

**Author:** ![zirkeldesign](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/zirkeldesign/32/14671_2.png) [@zirkeldesign](https://forum.shopware.com/u/zirkeldesign)\
**Post date:** [7. November 2023 um 14:52 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/18 "2023-11-07T14:52:04Z")

</div>

Hej @Angeal,

klar darfst du. Ich habe dazu erst einmal eine Klasse angelegt (`src/Core/Checkout/Customer/Password/LegacyEncoder/ModifiedBcrypt.php`) als LegacyEndoder (im Plugin oder Theme) angelegt:

```php
<?php declare(strict_types=1);

namespace ZD\Core\Checkout\Customer\Password\LegacyEncoder;

use Shopware\Core\Checkout\Customer\Password\LegacyEncoder\LegacyEncoderInterface;

class ModifiedBcrypt implements LegacyEncoderInterface
{
    public function getName(): string
    {
        return 'ModifiedBcrypt';
    }

    public function isPasswordValid(string $password, string $hash): bool
    {
        $verifyHash = $this->generateInternal($password, $hash);

        return hash_equals($hash, $verifyHash);
    }

    private function generateInternal(string $password, string $salt): string
    {
        return crypt($password, $salt);
    }
}

```

und dann in der `services.xml` referenziert.

```xml
<service id="ZD\Core\Checkout\Customer\Password\LegacyEncoder\ModifiedBcrypt">
    <tag name="shopware.legacy_encoder"/>
</service>

```

Beim Import der Kundendaten muss dann das alte Passwort in `legacy_password` importiert und in das Feld `legacy_endoder` bei Passwörtern, die mit `$2a$` starten, `ModifiedBcrypt`, bei `md5` codierten Passwörtern entsprechend `Md5` eingetragen werden.

Ich hoffe, das hilft soweit.

---

<div class="post-metadata">

**Author:** ![pcs](https://avatars.discourse-cdn.com/v4/letter/p/9d8465/32.png) [@pcs](https://forum.shopware.com/u/pcs)\
**Post date:** [27. März 2024 um 12:17 UTC](https://forum.shopware.com/t/csv-import-kunden-passwort/68193/19 "2024-03-27T12:17:29Z")

</div>

Ist schon ein bisschen her hatte das selbe problem.

Für gesalzen lieber das

public function isPasswordValid(string $password, string $hash): bool  
{  
$stack = explode(‚:‘, $hash);

```
    if (sizeof($stack) != 2) return false;

    if (md5($stack[1] . $password) == $stack[0]) {
      return true;
    }
}

```

irgendwelchenummer : 2 zahlen ← so geht es.
