myGully.com

myGully.com (https://mygully.com/index.php)
-   Entwicklung & Programmierung (https://mygully.com/forumdisplay.php?f=72)
-   -   Passwortverschlüsselungsmethode in MSSQL Datenbank herausfinden (https://mygully.com/showthread.php?t=3339656)

logan517 05.06.14 17:51

Passwortverschlüsselungsmethode in MSSQL Datenbank herausfinden
 
Hallo,

ich habe 1 ein Programm, welches im Hintergrund eine MSSQL Datenbank hat.
Dort werden unter andern die Benutzer/Anmeldeinformationen gespeichert.

Wichtig dabei ist für mich der Benutzername und das Passwort.
Ich möchte gerne davon regelmäßig ein Export in eine MySql Datenbank machen, damit sich die Benutzer mit den selben Daten auf einer Webseite einloggen können.

Das Problem dabei ist, ich bekomme nicht raus, wie das Passwort verschlüsselt wird.
Das Passwort der User ist mir dabei vollkommen egal, also es geht nicht darum dieses zu knacken.
Lediglich möchte ich auf der Webseite (mit PHP z.B.) das eingegeben Passwort verschlüsseln und dann mit dem in der Datenbank vergleichen.
Ich habe schon diverse Verschlüsselungsmethoden versucht, doch nichts hat übereingestimmt.

Hier mal ein Beispielpasswort verschlüsselt:
123456 =
DBFACB1C35622BE6D10F1EC9982A961A

Das Interessante dabei ist, jedes Passwort ist immer 32 Stellen lang.
Und auf einem anderen PC / Programm sieht 123456 z.B. so aus:
C15EB23C680E8098EF064FCA1CF8A80B

Versucht habe ich die gängigsten Verschlüsselungsmethoden
MD2, MD4, MD5, SHA, SHA1, SHA2_256 und SHA2_512

Habt ihr noch ne Lösung bzw. en anderen Vorschlag?
Gruß
Logan517

Wraither 05.06.14 19:31

Hallo,
es konnte z. B. mit md5-hash erstellt sein, dabei wird aber noch ein Salt hinzugefügt deswegen weichen die Hashwerte von einander ab.

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Heißt entweder arbeites bei deinen eigenen Programmen auch mit einen Salt oder du ersetzt das Salt im Mssql Programm mit NULL

saibot521_2 05.06.14 23:44

Ich schließe mich meinem Vorredner an. Um die Sicherheit der Kennwörter bei einem Diebstahl von Zugangsdaten in die DB zu erhöhen verwendet man oft "gesalzene Hash-Werte"

Die einfachste Form ist das Kennwort mit der User-ID zu "salzen".

Eine bessere (und vermutlich auch viel öfter verwendete) Variante ist, wenn man beim anlegen des Nutzers in einer anderen Spalte eine Art "Buchstaben-Sonderzeich-Zahlen Salat" mit z.B. 5 Zeichen Länge anlegt und das denn als Salz verwendet. Wirf doch mal einen Blick in die Tabelle wo die Kennwörter gespeichert werden - ist da vielleicht eine Spalte dabei wo bei jedem ein anderer "Zeichensalat" drin steht?

logan517 06.06.14 19:50

Zitat:

Zitat von Wraither (Beitrag 25649688)
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Vielen Dank, wusste ich noch garnicht.


Zitat:

Zitat von saibot521_2 (Beitrag 25650462)
Die einfachste Form ist das Kennwort mit der User-ID zu "salzen".

Das ist auch die Lösung bzw. der richtige Weg, allerdings noch nicht ganz

mit dem Programm .NET Reflector konnte ich die richtige Klasse finden, welche für die Verschlüsselung zuständig ist.

Code:

public string HashPassword(string UserID, string Passwort)
{
    UnicodeEncoding encoding = new UnicodeEncoding();
    MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
    byte[] bytes = encoding.GetBytes(UserID + Passwort);
    return BitConverter.ToString(provider.ComputeHash(bytes)).Replace("-", "");
}

Leider kann ich kein C# und ich kann daraus lediglich lesen, dass die das Passwort an die UserID gehängt wird und dieses dann mit MD5 verschlüsselt wird.
Wenn ich gleiches allerdings in PHP mache, stimmt es nicht überein
Code:

$md5 = md5($userid.$password);

logan517 07.06.14 16:28

Zitat:

Zitat von KanuKkidz (Beitrag 25652857)
Bytes mit Unicode-Encoding.

Ich steh grad aufm Schlauch.


Code:

function HashPassword($UserID, $Password){
        $charstring = $UserID.$Password;
        return md5(base64_encode($charstring));
}


Aber auch das funktioniert nicht:

return md5(utf8_encode($charstring));


spartan-b292 07.06.14 17:18

Du machst immer noch nicht das was der C# code macht.

logan517 08.06.14 00:14

Ich war doch schon fast aufm richtigen Weg, lediglich die Umwandlung in UTF 16 hatte ich nicht.

So funktioniert es nun perfekt
Code:

function HashPassword($UserID, $Password){
        $charstring = $UserID.$Password;
       
        for($i=0; $i<strlen($charstring); $i++){       
                $result .= $charstring[$i]."\x00";
        }
        return strtoupper(md5($result));
}

Danke

saibot521_2 08.06.14 17:40

Zitat:

Zitat von logan517 (Beitrag 25649449)

Hier mal ein Beispielpasswort verschlüsselt:
123456 =
DBFACB1C35622BE6D10F1EC9982A961A

Das Interessante dabei ist, jedes Passwort ist immer 32 Stellen lang.
Und auf einem anderen PC / Programm sieht 123456 z.B. so aus:
C15EB23C680E8098EF064FCA1CF8A80B

Zitat:

Zitat von logan517 (Beitrag 25652821)

Code:

public string HashPassword(string UserID, string Passwort)
{
    UnicodeEncoding encoding = new UnicodeEncoding();
    MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
    byte[] bytes = encoding.GetBytes(UserID + Passwort);
    return BitConverter.ToString(provider.ComputeHash(bytes)).Replace("-", "");
}


Ich hab gestern mal spaßenshalber das durchgespielt ...
bin von ID 1 bis 10Mio gegangen ... aber deine beiden MD5-Hash-Werte kamen da nicht raus :cry:

logan517 09.06.14 09:53

Zitat:

Zitat von saibot521_2 (Beitrag 25657804)
von ID 1 bis 10Mio gegangen

Frag mich nicht wieso, aber die BenutzerID ist nicht numerisch.
Diese ist 17 stellig in komplett mit Großbuchstaben und Zahlen gemischt.
Kp nach welchem Prinzip das Programm die anlegt.

Mit meinem Code, den ich zuletzt gepostet habe, funktionierst

saibot521_2 10.06.14 18:04

Hehe, ich hab da so eine Vorahnung ... hab vor kurzem ein Tutorial zum Thema NHibernate geschaut ... und da haben sie auch das Thema ID-Generator angesprochen. Mal angenommen der Programmierer hat in seinem Projekt den O/R-Mapper NHibernate verwendet, dann könnte es der "Hilo"-Generator sein. Da wird eine zufällige Buchstaben-Zahlen Kombi als Id erzeugt. Angeblich sollen die weltweit quasi eindeutig sein, so dass man theoretisch z.B. zwei Datenbanken "zusammen schmeißen" könnte. Ist halt nur doof wenn man dann per Hand eine bestimmte Id sucht *fg*


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.