Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Passworthash - einfach und schnell (https://www.delphipraxis.net/147460-passworthash-einfach-und-schnell.html)

SonicTTH 9. Feb 2010 10:46


Passworthash - einfach und schnell
 
Hallo,

Ich würde gerne wissen wie man am besten mit einer einzigen funktion einen passworthash kriegen könnte.

So z.b. MakeHash(Passwort):String ; <- Wobei der String dann der hash ist der raus kommt.

Ich hab mir schon vor einer weile mal die DCPCpiher + Hashes Komponenten geladen und damit verschiedene dinge versucht, allerdings ist die dokumentation dazu sehr schlecht, denn wenn ich die anweisungen befolge wie ich mir einen hash generieren kann bekomm ich da am ende immer nur irgendwelche zahlen raus, die zwar bei jeder generierung gleich sind, aber für mich KEINEN hash darstellen.

was ich rauskriege: 1235412452123123412231234212312312324232122
was ich denke das ein hash sein sollte: fdgfgsjdfgkhdgfr67df6gdf67sg76dfs87g687dfs6g7d6

Die zahlen die dabei rauskommen sind immer einzelne zahlen zwischen 0 und 255 und werden an einen string gereiht.

Also: Was mache ich falsch, bzw wie könnte ich einfacher an einen hash kommen?

Corpsman 9. Feb 2010 10:56

Re: Passworthash - einfach und schnell
 
Ich glaube du verstehst hier was falsch

ein Hash ist eine Zahl.

p80286 9. Feb 2010 10:59

Re: Passworthash - einfach und schnell
 
hallo SonicTTH

versuch doch mal Asserbads MD5. Ich komme ganz gut damit zurecht.

Was Du daraus benötigtst ist

MD5_Hash_OverBuffer(buf: Pointer; cblen: DWORD): TMD5digest;
MD5_Hash2String(MD5: TMD5Digest): String;

vielleicht gibt es bessere Umsetzungen, aber für meine Anforderungen reicht es.
Und es ist einfach zu handhaben.

Gruß
K-H

himitsu 9. Feb 2010 11:09

Re: Passworthash - einfach und schnell
 
Heiß: Eine Hashfunktion berechnet grundsätzlich erstmal eine Zahl oder eine Reihe von Zahlen.

Und diese Zahl(en) kann man dann in "irgendeinem" anderem Format als String darstellen.
Oftmals wird dafür die Hexadezimale oder eine Base64-Darstellung gewählt.

SonicTTH 9. Feb 2010 11:15

Re: Passworthash - einfach und schnell
 
Ich kenne mich mit pointern nicht so aus deshalb wäre ich se
hr dankbar wenn du mir erklären könntest wie ich aus dem klartext passwort als string den hash mache mithilfe der prozeduren die du mir da gezeigt hast

soviel ist mir schonmal klar:

Was hier rauskommt:
MD5_Hash_OverBuffer(buf: Pointer; cblen: DWORD): TMD5digest;

Also das TMD5digest, kommt hier rein:
MD5_Hash2String(MD5: TMD5Digest): String;
Und da kommt dann der hash raus, richtig?

Aber was ist buf: Pointer, und cblen? Das sagt mir alles nichts :(

Danke schonmal für die schnelle antwort und wenn gleich noch eine kommt nochmal danke :)

Sharky 9. Feb 2010 11:20

Re: Passworthash - einfach und schnell
 
Hai,

es sollte eigentlich so gehen:
Delphi-Quellcode:
var
  hashAsString : String;
begin
  hashAsString := MD5_Hash2String(MD5_HashForString('DeinKennWortString'));
end;

p80286 9. Feb 2010 11:28

Re: Passworthash - einfach und schnell
 
Nur mal so schnell getippt
Delphi-Quellcode:
form1.Memo1.Text=MD5_Hash2String(
                 MD5_Hash_OverBuffer(@form1.passwort.Text[1],length(form1.passwort.Text)));
Ich gehe davon aus, das es ein Tedit auf Deinem Form gibt, das "passwort" heißt.
Deine Eingabe steht also in passwort.Text und ist ein String.
Da Pointer ein Zeiger ist, der auf eine Speicherstelle zeigt, mußt Du wann immer ein Pointer verlangt wird hier die Adresse einen speicherstelle übergeben. In unserem Falle ist das @(.....Text[1]) (oder ADDR(.....Text[1])) die [1] stellt sicher, das auch wirklich der Text-Bereich des Strings übergeben wird.
Und da der Ponter natürlich keine Längen-Information mitschleppt, muß im zweiten Parameter die Länge des Strings mit übergeben werden.

Das vorher natürlich noch eine Längenüberprüfung stattfinden muß, setz' ich mal als selbstverständlich vorraus. PW mit derLänge 0 sind ja nicht sehr sinnvoll.

Gruß
K-H

@sharky
wo kommt denn der MD5_HashforString her? hinke ich so hinterher?

Sharky 9. Feb 2010 11:57

Re: Passworthash - einfach und schnell
 
Zitat:

Zitat von p80286
.... @sharky
wo kommt denn der MD5_HashforString her? hinke ich so hinterher?

Ziemlich weit unten in der MD5.pas :
Delphi-Quellcode:
{
  Danke an Sharky, der mich darauf hinwies, dass die Benutzer
  eine solche Funktion wohl lieber aufrufen würden.
 
  Sharky ist Moderator in der DP -> [url]http://www.delphipraxis.net/user4.html[/url]
}
function MD5_HashForString(aValue: String): TMD5Digest;
var
  Context: TMD5_CTX;
begin
  MD5Init(Context);
  MD5Update(Context, @aValue[1], Length(aValue));
  MD5Final(Context, Result);
end;
:stupid:

p80286 9. Feb 2010 12:24

Re: Passworthash - einfach und schnell
 
Danke!

Meine Version ist wohl zu alt!

gruß
K-H

SonicTTH 9. Feb 2010 13:30

Re: Passworthash - einfach und schnell
 
Danke für die schnellen und vielen Antworten!

Ihr seid Spitze! :thumb:

p80286 9. Feb 2010 14:13

Re: Passworthash - einfach und schnell
 
Wenn Deine Frage beantwortet ist,
Würdest Du sie dann bitte auch so kennzeichnen?

Gruß
K-H

SonicTTH 9. Feb 2010 15:35

Re: Passworthash - einfach und schnell
 
Ja, na klar doch - Danke für den Hinweis :) Hab ich jetzt getan :)

shmia 9. Feb 2010 19:16

Re: Passworthash - einfach und schnell
 
Wenn man MD5 verwendet, ist es sehr sinnvoll das Passwort zu "salzen":
Also:
Delphi-Quellcode:
const SALT_STR='muggel';
hash := MD5_HashForString(SALT_STR + passwort_klartext);
Grund:
Es gibt Webseiten (http://md5cracker.org) bei denen man nur einen MD5 Hashwert eingeben muss und man bekommt ein Passwort im Klartext angezeigt.
Das gilt zumindest für gängige 0815-Passwörter.

SonicTTH 9. Feb 2010 20:06

Re: Passworthash - einfach und schnell
 
Das ist ein sehr guter hinweis :)

Ich lasse von meinem programm den hash vom hash vom passwort speichern anstatt den hash vom passwort. Bringt das was nach eurer professionellen meinung? ^^ :)

rollstuhlfahrer 9. Feb 2010 20:14

Re: Passworthash - einfach und schnell
 
Wenn dein Programm debuggt wird, dann sieht man das eh und kann sich die PWs also zurechtlegen, da nützt werder das salzen noch zuckern noch sonst irgendwas. Also das mit dem doppelten Hash ist keine schlechte Idee, aber nicht besser als das mit dem Salzen. Der Hash wird auf beide Arten schwerer zu knacken sein.

Bernhard

himitsu 9. Feb 2010 20:22

Re: Passworthash - einfach und schnell
 
Zitat:

Zitat von rollstuhlfahrer
Wenn dein Programm debuggt wird, dann sieht man das eh und kann sich die PWs also zurechtlegen, da nützt werder das salzen noch zuckern noch sonst irgendwas. Also das mit dem doppelten Hash ist keine schlechte Idee, aber nicht besser als das mit dem Salzen. Der Hash wird auf beide Arten schwerer zu knacken sein.

Wenn man aber das selbe Passwort auch noch wo anders verwendet und dort auch noch ein anderer SALT verwendet wird, dann bringt es nichts, wenn man sich zu dem bekannten MD5 ein Passwort suchen/berechnen läßt.

SonicTTH 9. Feb 2010 21:15

Re: Passworthash - einfach und schnell
 
Also das beste ist immer noch ein gutes passwort, hm?

Gibts möglichkeiten sein Programm eigentlich gegen debuggen schützen? Sozusagen laufzeitver- und entschlüsselung?

Oder zumindest so sachen wie bestimmte routinen irgendwie "unsichtbarer" zu machen im maschinen code?

Klaus01 9. Feb 2010 21:17

Re: Passworthash - einfach und schnell
 
Zitat:

Zitat von SonicTTH
Also das beste ist immer noch ein gutes passwort, hm?

Gibts möglichkeiten sein Programm eigentlich gegen debuggen schützen? Sozusagen laufzeitver- und entschlüsselung?

Oder zumindest so sachen wie bestimmte routinen irgendwie "unsichtbarer" zu machen im maschinen code?

Man kann feststellen, ob ein Debugger sich eingeklinckt hat -> isDebuggerPresent

Grüße
Klaus

himitsu 9. Feb 2010 21:27

Re: Passworthash - einfach und schnell
 
Zitat:

Zitat von Klaus01
Man kann feststellen, ob ein Debugger sich eingeklinckt hat -> isDebuggerPresent

Es gibt Möglichkeiten, aber ALLE lassen sich mehr oder weniger leicht umgehen.

Vorallem diese WinAPI ist sehr leicht zu umgehen, indem man einen API-Hook installiert
und im Hook "nein, kein Debugger da" sagt.
(also zwischen den Zeitpunkten, wo sich der Debugger eingelinkt hat und das nächste Mal diese Funktion abgerufen wird)

Luckie 9. Feb 2010 21:32

Re: Passworthash - einfach und schnell
 
Zitat:

Zitat von SonicTTH
Gibts möglichkeiten sein Programm eigentlich gegen debuggen schützen? Sozusagen laufzeitver- und entschlüsselung?

Für eine neue Frage mach bitte einen neuen Thread auf. Aber die Suche sollte zu diesem Thema sehr ergiebig sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz