AES256 Crypto
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von th3Khem.
-
-
-
-
Dein Post war schonmal sehr hilfreich muss nur leider zugeben das ich IV und Salt noch nicht so verstanden habe .DerSalt soll das ganze besser verschlüsseln und wird als Klartext angegeben oder und der IV.Hoffe kannst ma das noch anders erklären.
Und wie würdest du Autentifizieren für ein loginsystem einsetzen wenn man das Passwort nicht in my Setting oder so verschlüsselt speichern will.Momentan Nutz ich sha256 um das Passwort zu verschlüsseln und das wird mit dem eingegeben text verglichen.oder ist die herrsngehensweise das falsch beim loginsystem ?
Danke schonmal für die HilfeDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „th3Khem“ ()
-
Bei Loginsystemen ist die Vorgehensweise normalerweise:
1. (einmalig) Gesetztes Passwort wird gehasht (zB mit SHA256) und gespeichert
2. (jedes mal) Eingegebenes Passwort wird gehasht und mit dem gespeicherten Hash verglichen, wenn beide gleich sind, ist das eingegebene Passwort richtig.
Daher denke ich, soweit ich deine Erklärungen verstanden habe, dass deine Hergehensweise richtig ist :).
Den Hash solltest du übrigens nicht als hash.txt oder so irgendwo speichern, da lässt er sich ganz einfach finden und ersetzen, versteck sie irgendwo ;). -
Edit by ErfinderDesRades: unnötiges Vollzitat entfernt
K genau so hab ich das auch gemacht dachte nur das es noch eine besseres verfahren gibt . Danke trotzdemDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
ja, gibts ja auch. Statt Hashen Schlüssel ableiten, mit Salt.
Aber hashen ist auch nicht soo schlecht, also ich werd ein Sha256-gehashtes Passwort vmtl. nicht knacken können. -
Edit by ErfinderDesRades: unnötiges Vollzitat entfernt
K und genau das ableiten anhand des Salt verstehe ich nicht .Den der Salt wird ja als klartext geschrieben wa ? Aber wie arbeitet das ganze weiter das ist meine Lücke trotz deines vorhergehenden Post. Den will mir so das loginsystem und das verschlüsseln der datei so machenDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Sha("passwort" + "salt")
der salt steht höchstens im programm als klartext, jedoch nicht direkt im Hash. Außerdem kann man bei der Verrechnung von passwort und salt auch komplexere Vorgänge implementieren, welche nicht ganz so einfach nachzuvollziehen sind.Ich wollte auch mal ne total überflüssige Signatur:
---Leer--- -
nein, das Salt wird als Klartext mittm "Hash" mitgeliefert.
Nicht im Programm, denn dann gibts für dieses Programm nur ein einziges Salt, die Idee aber ist, dass jeder "Hash" sein eigenes Salt hat. -
@nafets3646
Eine kurze Frage bezüglich dem ein Passwort in Hash umwandeln und später beim Anmelden immer vergleichen, ob das Login passwort in Hash mit dem gespeichertem Hash Wert übereinstimmt.
Wie wissen Seiten, Programmen etc. bei denen man zuerst registrieren muss, dass beim Erstellen Benutzer Account zu erstellen, beim Passwort keine klein / gross Buchstabe, Zahl oder Sonderzeichen vorhanden ist oder eben nicht?
Also muss es ja im Prinzip einen Zwischenschritt geben, der das eingegebene Person nach diesen Kriterien überprüft. Erst dann wird es in Hash umgewandelt und abgespeichert. Ist das wirklich so?
Lg BK -
K wenn ich jetzt richtig verstehe müsste ich ein password als Hash (bzw. als verschlüsselt) in mein Programm speichern und den Salt und das eigentliche Passwort im loginsystem einbauen also ein feld für das Passwort und eins für den Salt wo ich diese beiden eingeben muss und dann so alles gebildet wird oder ?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „th3Khem“ ()
-
ohne präzises Denken wird das nix.
in einem Programm kann man nichts abspeichern. Man speichert in eine Datei.
Ein Passwort wird nie abgespeichert. Es wird nur der abgeleitete Schlüssel und das Salt, und für AES und Konsorten auch der IV abgespeichert.
Ein Passwort wird auch nirgends eingebaut.
auch Salt und IV werden nirgends eingebaut.
Ein Schlüssel-Ableitung wird implementiert, und dabei wird vlt. dasRfc2898DeriveBytes
eingebaut.
Aber das steht viel besser erklärt im Tut. -
Edit by ErfinderDesRades: unnötiges Vollzitat entfernt
K und genau das geht nicht in mein Kopf also gebe ich in mein Programm den Salt und IV ein k da komm ich noch mit aber woher weis das crypto das das eingegebene Passwort korrekt ist ?Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
wer ist eiglich dieser "k", den du so häufig erwähnst?
Was ist das "crypto"?
Salt und IV werden niemals eingegeben. Die werden generiert, beim Schlüssel ableiten.
Für ein Login brauchst du auch kein IV, weil IV braucht man für symmetrische Verschlüsselung von Texten, für Authentifizierung braucht mans nicht. Es ärgert mich, dassich dir das ganze Tut nochmal vorkauen muß. -
Edit by ErfinderDesRades: unnötiges Vollzitat entfernt
das "K" steht für OK dumme Angewohnheit von mir. K wer ma das tut nochmals durchlesen und Hof das ich es dann kapiere trotzdem dankeDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
K hoffe jetzt hab ich es verstanden .
1. Unzwar erstelle ich zuerst ein Salt der aber zufällig generiert wird. Als nächstes bestimme ich das Passwort .Aus Salt und password wird ein Schlüssel generiert der dann gehashed wird .Den Schlüssel muss man dan mitgeben später.
2 bei entschlüsseln wird später der Schlüssel durch das password zerlegt in Salt und password und dann entschlüsselt .
Stimmt es soweit wie ich es jetzt verstehe ? -
lies nochma Tut. Du bringst Verschlüsselung und Authentifizierung durcheinander.
Und vergiss mal das Wort "Hash". Schlüsselableitung ist keine Hash-Funktion.
Und entschlüsselt wird bei einer Authentifizierung nirgends.
Ich kanns auch nochma versuchen erklären:
Beim SchlüsselAbleiten wird das Passwort vom User genommen, und ausserdem ein kryptografisch starker zusätzlicher Zufalls-Schlüssel generiert, das Salt.
Passwort und Salt werden zusammen durch den Algo gezogen, und raus kommt der abgeleitete Schlüssel.
Der abgeleitete Schlüssel wird mit dem Salt zusammen gespeichert - der User kriegt vom Salt ühaupt nix mit - in meine Crypter-Klasse wird das Salt dem abgeleiteten Schlüssel einfach vorangestellt.
Zur Autentifizierung Passwort eingeben, Salt auslesen, daraus mit obigem Algo den Schlüssel generieren und gucken, ob er identisch mit dem gespeicherten Schlüssel ist.
Der Witz ist nu:
Der Hash eines einfachen, schwachen Passworts lässt sich mw. in einer Rainbow-Table von 10Mio Einträgen auffinden.
Aber nun kommt noch das Salt, gewissermaßen als Zusatz-PW hinzu. Da es bekannt ist, isses eiglich kein Passwort, sondern nur eine Verkomplizierung des Algorithmus.
Da nu jeder abgeleitete Schlüssel ein anneres Salt hat, müssteman für jedes Salt eine eigene Rainbow-Table generieren.
Da kannmandann die Table auch sein lassen, und gleich mit olle Brute-Force zu knacken versuchen. -
k aus anderem tut und deinem würde es jetzt so aussehen
Encrypt:Der Salt ist erstmal als 12345678 angegeben wird aber später generiert
VB.NET-Quellcode
- Public Sub Encrypt(ByVal AESKeySize As Int32, _
- ByVal DecryptedString As String, _
- ByVal Password As String)
- Dim Salt() As Byte
- Salt = System.Text.Encoding.UTF8.GetBytes( _
- "12345678")
- Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
- Dim AES As New AesManaged
- AES.KeySize = AESKeySize
- AES.BlockSize = 128
- ' Algorithmus initialisieren:
- AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
- AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
- ' Memory-Stream und Crypto-Stream erzeugen -> CreateEncryptor()
- Dim ms As New IO.MemoryStream
- Dim cs As New CryptoStream(ms, AES.CreateEncryptor(), _
- CryptoStreamMode.Write)
- ' Daten verschlüsseln:
- Dim Data() As Byte
- Data = System.Text.Encoding.UTF8.GetBytes(DecryptedString)
- cs.Write(Data, 0, Data.Length)
- cs.FlushFinalBlock()
- cs.Close()
- ' Verschlüsselte Daten als String ausgeben:
- EncryptedString_ = Convert.ToBase64String(ms.ToArray)
- ms.Close()
- AES.Clear()
- End Sub
Decrypt:
VB.NET-Quellcode
- Public Sub Decrypt(ByVal AESKeySize As Int32, _
- ByVal EncryptedString As String, _
- ByVal Password As String)
- Dim Salt() As Byte
- Salt = System.Text.Encoding.UTF8.GetBytes( _
- "12345678")
- Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
- ' Instanzierung des AES-Algorithmus-Objekts:
- Dim AES As New AesManaged
- ' Ein mit 256 bit verschlüsselter String kann
- ' auch nur mit 256 bit entschlüsselt werden!
- AES.KeySize = AESKeySize ' möglich sind 256 oder 128 bit
- AES.BlockSize = 128
- ' Algorithmus initialisieren:
- AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
- AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
- ' Memory-Stream und Crypto-Stream erzeugen -> CreateDecryptor()
- Dim ms As New IO.MemoryStream
- Dim cs As New CryptoStream(ms, AES.CreateDecryptor(), _
- CryptoStreamMode.Write)
- Try ' Daten entschlüsseln:
- Dim Data() As Byte
- Data = Convert.FromBase64String(EncryptedString)
- cs.Write(Data, 0, Data.Length)
- cs.FlushFinalBlock()
- cs.Close()
- ' Die entschlüsselten Daten als String ausgeben:
- DecryptedString_ = System.Text.Encoding.UTF8.GetString(ms.ToArray)
- ms.Close()
- AES.Clear()
- Catch ex As Exception
- DecryptedString_ = "Ungültiges Passwort!"
- End Try
- End Sub
Verschlüsseln:
Entschlüsseln:
Ist jetzt als string ermal gemacht was ver und entschlüsselt ist. Aber was ich mitliefern muss ist nun der Salt und ?Schlüssel?
nur wie kann ich den schlüssel in string mitliefern?
Schlüssel wird ja hier generiert oder ?
nur wie verhält sich das wenn ich das auch als login nehme das kann ich ja schlecht "yFz/PHuc9+weT7gyn4VzXw==" was ja Hase ist in einem string reinschreiben oder ?Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „th3Khem“ ()
-
Funktioniert der meinem Tut beiliegende Code nicht?
Also nachdem ich dir nun mein Tut individuell vorgekaut habe, binnich jetzt durchaus abgeneigt, dir auch den Code individuell vorzukauen.
bye
-
Ähnliche Themen
-
5 Benutzer haben hier geschrieben
- Gast (17)
- ErfinderDesRades (9)
- Manawyrm (3)
- nafets (2)
- jvbsl (1)