Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
|
05.06.14, 17:51
|
#1
|
Ausfänger
Registriert seit: Jun 2010
Beiträge: 281
Bedankt: 54
|
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
|
|
|
05.06.14, 19:31
|
#2
|
Anfänger
Registriert seit: Aug 2009
Beiträge: 17
Bedankt: 3
|
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 Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Heißt entweder arbeites bei deinen eigenen Programmen auch mit einen Salt oder du ersetzt das Salt im Mssql Programm mit NULL
|
|
|
05.06.14, 23:44
|
#3
|
Anfänger
Registriert seit: Feb 2012
Beiträge: 35
Bedankt: 18
|
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?
|
|
|
06.06.14, 19:50
|
#4
|
Ausfänger
Registriert seit: Jun 2010
Beiträge: 281
Bedankt: 54
|
Zitat:
Zitat von Wraither
|
Vielen Dank, wusste ich noch garnicht.
Zitat:
Zitat von saibot521_2
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);
|
|
|
07.06.14, 16:28
|
#5
|
Ausfänger
Registriert seit: Jun 2010
Beiträge: 281
Bedankt: 54
|
Zitat:
Zitat von KanuKkidz
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));
|
|
|
07.06.14, 17:18
|
#6
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.700
|
Du machst immer noch nicht das was der C# code macht.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
08.06.14, 00:14
|
#7
|
Ausfänger
Registriert seit: Jun 2010
Beiträge: 281
Bedankt: 54
|
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
|
|
|
08.06.14, 17:40
|
#8
|
Anfänger
Registriert seit: Feb 2012
Beiträge: 35
Bedankt: 18
|
Zitat:
Zitat von logan517
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
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
|
|
|
09.06.14, 09:53
|
#9
|
Ausfänger
Registriert seit: Jun 2010
Beiträge: 281
Bedankt: 54
|
Zitat:
Zitat von saibot521_2
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
|
|
|
10.06.14, 18:04
|
#10
|
Anfänger
Registriert seit: Feb 2012
Beiträge: 35
Bedankt: 18
|
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*
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
().
|