Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Passwort verschlüsseln, aber wie? (https://www.delphipraxis.net/135347-passwort-verschluesseln-aber-wie.html)

Woyzeck 9. Jun 2009 14:10


Passwort verschlüsseln, aber wie?
 
Hallo liebe Forumsmitglieder,


ich bin aktuell an einem Projekt beschäftigt, für dass ich nun einen Passwortzugang schreiben muss. Ich bin leider in der Kryptographie sehr neu, außer gewissen Verschlüsselungsverfahren wie Caesar oder durch Matrizenmultiplikation kenne ich mich hier nicht wirklich aus.

Während meiner Recherchen im Internet bin ich immer wieder darauf gestoßen, dass man Passwörter über SHA1 oder so in Hashcodes umwandeln und dadurch verschlüsseln kann. Soweit so gut, ich hab mir auch schon das DCPcrypt von City in the Sky heruntergeladen. Allerdings ist das ganze jetzt nicht wirklich intuitiv.

Zur Erklärung meines Vorhabens:
Es soll ein Eingabeformular geben mit Benutzername und Passwort.
Diese Angaben sollen dann mit dem Benutzernamen und dem verschlüsselt abgespeicherten Passwort aus einer MySql-Datenbank verglichen werden.

Das mit der Anbindung zur Datenbank soll jetzt erstmal nicht das Problem sein. Ich benötige zu erst einmal die Erklärung wie ich denn einen String mithilfe der Units verschlüsseln kann.


Mit freundlichen Grüßen

Woyzeck

Mikescher 9. Jun 2009 14:49

Re: Passwort verschlüsseln, aber wie?
 
Hi,

Also ich glaube das was du meinst ist nicht verschlüsseln sondern einen HAsh-Code erzeugen das bedeutet dass du dein Passwort zwar in einen HAsh-Code umwandeln kannst aber (in der Theorie) nicht wieder zurück. Du vergleichst am Ende nur den HAsh-Code des richtigen Passwortes und den HAsh-Code des eingegebenen. SO kann dann niemand (auch wenn er den Hash-Code hat) dein PAsswort herausfinden.

Zum Thema der Umsetzung in Delphi gibt es auf der Website auch Demos :http://www.cityinthesky.co.uk/files/
und falls du nicht so ein riesen Package brauchst gibt es auch viele einzelne Proceduren die dir deinen String in einen HAsh-Code umwandeln (dann aber nur 1 verfahren)

Hoffe ich konnte dir helfen ... Mikescher

Edit: Ich persönliche BEnutze gerne die DEC von Hagen/NegaH die ist IMHO ziemlich selbsterklärend von den Methoden her

Woyzeck 9. Jun 2009 15:23

Re: Passwort verschlüsseln, aber wie?
 
Zitat:

Also ich glaube das was du meinst ist nicht verschlüsseln sondern einen HAsh-Code erzeugen das bedeutet dass du dein Passwort zwar in einen HAsh-Code umwandeln kannst aber (in der Theorie) nicht wieder zurück. Du vergleichst am Ende nur den HAsh-Code des richtigen Passwortes und den HAsh-Code des eingegebenen. SO kann dann niemand (auch wenn er den Hash-Code hat) dein PAsswort herausfinden.
ja, das ist, was ich mir darunter vorstelle!

Nun bin ich aber wie gesagt absoluter Neuling auf dem Gebiet. Hash-Codes und so sind demnach Neuland für mich.

Ich werde ehrlich gesagt aus der Demo kein Stückchen schlauer.

Anfangs will ich jetzt einmal ganz einfach in einem Editfeld ein "Passwort" eingeben und mithilfe eines Buttonsclicks in einem anderen Edit den erzeugten Hashcode ausgeben.

Wie muss ich dazu vorgehen?
Welche Units des Packages benötige ich, welche Funktionen/Prozeduren der Units muss ich verwenden? In welchen Datentyp muss ich meinen String umwandeln?

Ich befürchte, du/ihr müsst bei mir ganz von vorne anfangen ;-)

Mit freundlichen Grüßen

Woyzeck

Woyzeck 9. Jun 2009 16:58

Re: Passwort verschlüsseln, aber wie?
 
wo finde ich die DEC?

mkinzler 9. Jun 2009 19:18

Re: Passwort verschlüsseln, aber wie?
 
http://dec-michael-puff.de/

divBy0 9. Jun 2009 20:18

Re: Passwort verschlüsseln, aber wie?
 
Zitat:

Zitat von mkinzler
http://dec-michael-puff.de/

Du meinst: http://dec.michael-puff.de/

Woyzeck 10. Jun 2009 11:55

Re: Passwort verschlüsseln, aber wie?
 
Ok, danke für den Link... also die DEC hab ich mir jetzt runtergeladen.

Da gibts ja zumindest schon mal einen Beispielcode.
Was mich dabei etwas irritiert, ist, dass dort eine Funktion Decrypt beschrieben wird. Ich dachte, das ganze kann dann nicht mehr entschlüsselt werden? Oder ist das noch nicht die Umwandlung in einen Hashcode?

Vielleicht kann mir ja jemand zuerst mal die grobe Vorgehensweise erklären, sozusagen vom String zum Hashcode.

Danke im Voraus

Woyzeck

mkinzler 10. Jun 2009 11:57

Re: Passwort verschlüsseln, aber wie?
 
DEC kann verschiedene Algorithmen nicht nur Hash-Algos

Woyzeck 10. Jun 2009 12:04

Re: Passwort verschlüsseln, aber wie?
 
Achso ok...

Es gibt da ja irgendwie Ciphers und Hashs. Für was benötige ich das, wo liegt der Unterschied, welche muss ich benutzen?

mkinzler 10. Jun 2009 12:08

Re: Passwort verschlüsseln, aber wie?
 
hashes sind nicht umkehrbar, weil sie nicht eineindeutig sind.

Woyzeck 10. Jun 2009 12:13

Re: Passwort verschlüsseln, aber wie?
 
ciphers dagegen schon?

Benötigt man trotzdem beides? Auf diversen Seiten habe ich gelesen, dass einige zuerst Blowfish und dann SHA1 anwenden.

Blowfish ist ein Cipher und SHA1 ein Hash-algo. Seh ich das richtig?
Ist das dann nur zur weiteren Erhöhung der Sicherheit gemacht worden, dass beides verwendet wird?


Für das Projekt ist jetzt nicht die allerhöchste Sicherheitsstufe notwendig, die Daten die damit geschützt werden sind jetzt nicht so wichtig, aber ich würde gerne mal eine "seriöse" Verschlüsselung verwenden und nicht etwas simples wie Caesar und co.

Reicht es dann aus nur einen Cipher oder nur einen Hash zu benutzen?

mkinzler 10. Jun 2009 12:17

Re: Passwort verschlüsseln, aber wie?
 
SHA1 sollte reichen. du musst ja clientseitig das selbe machen, was der server macht:
Du hasht das eingegebene Passwort und sendest diesen an den Server
Dieser vergleicht den Hash mit dem hinterlegten Hash. Diese stimmen natürlich nur dann überein, wenn beide den selben Algorithmus verwenden.

guidok 10. Jun 2009 12:20

Re: Passwort verschlüsseln, aber wie?
 
In dec sind 26 verschiedene Hash-Algorithmen und 30 Verschlüsselungsalgorithmen implementiert.

Für deine Anwendung ist ein Hash vermutlich völlig ausreichend - such dir einen von den 26 aus.

Woyzeck 10. Jun 2009 12:21

Re: Passwort verschlüsseln, aber wie?
 
Ok,

also dann will ich meinen string mit SHA1 hashen. Wie gehe ich dazu vor? Benötige ich nur die Hash-Unit?

Welche Funktionen,Prozeduren muss ich mit welchen Parametern aufrufen, damit ich am Ende meinen Hash habe?


EDIT: Ich glaube, ich habe durch Probieren soeben den Stein der Weisen gefunden. Danke.

Woyzeck 10. Jun 2009 19:35

Re: Passwort verschlüsseln, aber wie?
 
Also wie gesagt: Mein Passwort wird jetzt mit SHA1 gehasht und in einer DB abgelegt. Das klappt bis jetzt wunderbar.

Jetzt ist mir ein weiteres Problemchen klar geworden. Und zwar muss ich die Zugangsdaten zum Server in einer Datei speichern. Das funktioniert soweit auch, allerdings ist es nicht besonders ratsam das Zugangspassword in der .ini unverschlüsselt zu speichern. Ich brauche nun also einen Vershclüsselungsalgorithmus, der auch wieder entschlüsselt werden kann.

Ich dachte mir, dass geht mit blowfish jetzt bestimmt ähnlich wie mit SHA1, aber leider ist dem nicht so. Ich bräuchte mal eine Erklärung der Prozeduren init und Encode/Decode der blowfish-Klasse.

Was bedeuten die einzelnen Parameter und was muss ich da eintragen?

MfG Woyzeck

Woyzeck 11. Jun 2009 11:48

Re: Passwort verschlüsseln, aber wie?
 
Ich habe beim Stöbern im Forum verschiedene Beiträge zu den Ciphers aus der DEC gelesen. Häufig gab es dabei Funktionen wie "EncodeString". Bsp.: Beitrag aus Forum

Gibt es diese Funktion in v5.2 nicht mehr, oder bin ich nur zu doof sie zu finden?

Ich verzweifel so langsam an dem Problem, weil ich irgendwie nichts passendes finde. Helft mir bitte mal auf die Sprünge!

himitsu 11. Jun 2009 12:16

Re: Passwort verschlüsseln, aber wie?
 
kann sein, daß dieser "Befehl" noch aus Version 3 stammt und jetzt anders heißt, bzw. anders implementiert ist.

eventuell findest du ja in neueren Beiträgen etwas dazu
oder auch in diesem Thread, wo es um die letzte größere Umstellung ging:
http://www.delphipraxis.net/internal...t.php?t=157795


[add]
ich glaub da gibt's interessante Threads :angel:
Hier im Forum suchenDEC EncodeString
> http://www.delphipraxis.net/internal...c+encodestring

Woyzeck 11. Jun 2009 13:36

Re: Passwort verschlüsseln, aber wie?
 
Delphi-Quellcode:
function TfrmLogin.Encode(Was: string):String;
begin
  Was:=Was+Salt;
with DECCipher.TCipher_Blowfish.Create do
  try
    Init('Passwort');
    Result := EncodeBinary(Was, TFormat_HEX);
  finally
    Free;
  end;

end;

Ahh, ich bin glaube ich fündig geworden!

Also wenn ich das richtig sehe, kann ich hiermit meinen String strText verschlüsseln. Entsprechend müsste ich ihn dann mit DecodeBinary wieder entschlüsseln können.

Aber wie bekomme ich beim Decodieren das Salt-Ende wieder "ab"?

Delphi-Quellcode:
function TfrmLogin.Decode(Was: string):String;
begin
with DECCipher.TCipher_Blowfish.Create do
  try
    Init('Passwort');
    Result := DecodeBinary(Was, TFormat_HEX);
  finally
    Free;
  end;
    Result:=Result; //hier soll die Salt-Konstante entfernt werden
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.

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