AES Verschlüsselung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    AES Verschlüsselung

    Hallo Zusammen

    Ich habe mir folgende Klasse gebastelt:

    VB.NET-Quellcode

    1. Public Class AES
    2. Public Shared Function Encrypt(ByVal input As String, ByVal pass As String) As String
    3. Dim AES As New System.Security.Cryptography.RijndaelManaged
    4. Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
    5. Dim encrypted As String = ""
    6. Try
    7. Dim hash(31) As Byte
    8. Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
    9. Array.Copy(temp, 0, hash, 0, 16)
    10. Array.Copy(temp, 0, hash, 15, 16)
    11. AES.Key = hash
    12. AES.Mode = Security.Cryptography.CipherMode.ECB
    13. Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
    14. Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input)
    15. encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
    16. Return encrypted
    17. Catch ex As Exception
    18. End Try
    19. End Function
    20. Public Shared Function Decrypt(ByVal input As String, ByVal pass As String) As String
    21. Dim AES As New System.Security.Cryptography.RijndaelManaged
    22. Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
    23. Dim decrypted As String = ""
    24. Try
    25. Dim hash(31) As Byte
    26. Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
    27. Array.Copy(temp, 0, hash, 0, 16)
    28. Array.Copy(temp, 0, hash, 15, 16)
    29. AES.Key = hash
    30. AES.Mode = Security.Cryptography.CipherMode.ECB
    31. Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
    32. Dim Buffer As Byte() = Convert.FromBase64String(input)
    33. decrypted = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
    34. Return decrypted
    35. Catch ex As Exception
    36. End Try
    37. End Function
    38. End Class


    Ich habe eine Form mit dem Namen "frm_main"

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. txtEncryptedText.Text = AES.Encrypt(txtOriginalText.Text, "qerq34234234$$234$$$234234234234")
    4. End Sub
    5. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    6. MessageBox.Show(AES.Decrypt(txtEncryptedText.Text, "qerq34234234$$234$$$234234234234"))
    7. End Sub
    8. End Class


    Dort wird mein String verschlüsselt bzw. entschlüsselt.
    Wie ihr seht habe ich meinen Salt"qerq34234234$$234$$$234234234234" hardgecodet im VB.NET Code.

    Könnt ihr mir Anregungen geben wie ich das besser machen kann?
    Denn mir ist klar, dass wenn man den Salt im Quellcode hat dies nicht optimal ist.

    Freundliche Grüsse

    Lingo

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lingo“ ()

    XML, Datenank(MySQL), Config-File, FTP(Datei herunterladen, Hash/schlüssel vergleichen)...wären jetzt so meine spontanen Einfälle

    PS: zu der FTP-Geschichte: Ich nehm meistens Dropbox her, kannst aber auch jeden anderen x-beliebigen Webspace Provider hernehmen :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Runshak
    Ich habe mich auch gerade schlau gemacht.
    Ja du hast Recht der Salt wird jedesmal neu generiert und z.B. in einer MYSQL DB mit dem verschlüsselten Passwort abgespeichert.

    @All
    Vielleicht kennt sich jemand sehr gut mit Verschlüsselungen aus und kann mir sagen wir ich meinen Code evt. noch optimieren könnte?
    Das ganze mit dem Salt ist nun für mich klar.
    Mir kommt Dein aktuelles System etwas komisch vor.
    Üblicherweise sieht das beim Ver-/Entschlüsseln so aus:

    Daten und Passwörter müssen nicht Strings sein. Ganz besonders beim Verschlüsseln von Dateien sollte man deshalb direkt mit Byte-Arrays arbeiten. Beispielhaft habe ich in den Diagrammen mit Encoding.GetBytes() und .GetString() Strings verwendet. Wenn Du Dir sicher bist, dass Du Strings verwenden möchtest, verwende nicht ASCII, denn das ist ein 7-Bit-Zeichensatz. Keiner kann sagen, was herauskommt, wenn Du versuchst, aus Bytes > 127 wieder ein Zeichen zu machen. Ich würde UTF-8 empfehlen, bin aber mit ANSI (Encoding.Default) bisher problemlos zurechtgekommen.
    Der Salt sollte eine vom Passwort unabhängige Komponente sein, deshalb der RNGCryptoServiceProvider beim Verschlüsseln. Weil man nicht velangen kann, dass der Benutzer ein Passwort eingibt, das genau mit der Schlüsselgröße des Algorithmus zusammen passt, verwendet man Das DeriveBytes-Dings. Das generiert einen Schlüssel und InitializationVector in passender Größe für den Algorithmus.
    Dann werden die Daten einmal durch einen CryptoStream geschoben und aus dem darunter liegenden MemoryStream geholt.
    Die daraus resultierenden Bytes und den Salt kann man irgendwo speichern. Wenn Du das in eine Datenbank speichern willst, und nicht unbedingt Blob sondern String als Datentyp für die Felder verwenden willst, solltest Du die Bytes zu einem Base64-String konvertieren. Der enthält keine Sonderzeichen, die beim Arbeiten mit der Datenbank probleme ergeben könnten.
    Das Verwenden von Streams hat übrigens große Vorteile: Man kann z.B. statt des MemoryStreams einen FileStream verwenden, dann werden die verschlüsselten Daten direkt in eine Datei geschrieben. Genauso kann man mit anderen Streams oben rein schreiben. Man kann den Stream (z.B. beim Entschlüsseln) auch umdrehen, und den fertigen String aus einem StreamReader, aus einem CryptoStream, aus einem FileStream lesen.


    Edit für zukünftige Leser:
    Wenn man nur ein Byte-Array verschlüsseln will, muss man nicht extra einen CryptoStream und MemoryStream verwenden. Man kann auch direkt am ICryptoTransform-Objekt TransformFinalBlock mit dem zu verschlüsselnden Byte-Array aufrufen. Das ist bei kleinen Datenmengen zu empfehlen. Bei größeren sollte man generell Streams verwenden, damit der RAM nicht aufgebläht wird.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Niko Ortner“ ()

    @ErfinderDesRades
    Es scheint so als hätte ich da den Code falsch zusammen gebastelt.
    Ich werde einmal versuchen dies nach den Diagrammen von @Niko Ortner zu coden.

    @Niko Ortner
    Ich möchte nur Passwörter verschlüsseln. Habe ich das dann richtig verstanden; Bei Bild NR1 kann ich den ganz rechten Ast (welcher die Datei verschlüsselt.) einfach weg lassen?

    Vielen Dank für eure Hilfe!

    EDIT 21:14

    Ich versuche gerade alles von Grund auf mit dem Tutorial von ErfinderDesRades und den Bildern von Niko Ortner zu erstellen.
    Damit ich auch jeden Schritt verstehe.

    Mein Zwischenresultat:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.IO
    3. Imports System.Collections.Generic
    4. Imports System.Security.Cryptography
    5. Public Class Form1
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Encrypt()
    8. End Sub
    9. Public Sub Encrypt()
    10. Dim myPassword As String = "DasIstMeinPasswort"
    11. 'Salt erstellen
    12. Dim rng = New RNGCryptoServiceProvider()
    13. Dim mySaltBytes = New Byte(16) {} 'Salt mit 16 Bytes
    14. rng.GetBytes(mySaltBytes)
    15. 'Passwort & Salt in RFC
    16. Dim myRFC As New Rfc2898DeriveBytes(myPassword, mySaltBytes, 1000)
    17. Dim myRFCBYres As Byte()
    18. myRFCBYres = myRFC.GetBytes(32) 'RFC mit 32 Bytes
    19. End Sub
    20. End Class


    Ich hoffe das stimmt soweit.
    Laut Bild Kommt jetzt der CryptoServiceProvider. Da haperts bei mir mit dem Verständnis wofür der ist.

    Nochmal vielen Dank für eure Hilfe!

    EDIT 22:04

    Ich habe nun das ganze noch einmal durchdacht und bin zum Schluss gekommen, dass ich eigentlich schon fertig war? Kann das Sein?

    Denn mit folgendem Code konnte ich das ganze Encrypten und Decrypten:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.Text
    2. Imports System.IO
    3. Imports System.Collections.Generic
    4. Imports System.Security.Cryptography
    5. Public Class Form1
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Encrypt()
    8. End Sub
    9. Public Sub Encrypt()
    10. Dim myPassword As String = "DasIstMeinPasswort"
    11. 'Salt erstellen
    12. Dim rng = New RNGCryptoServiceProvider()
    13. Dim mySaltBytes = New Byte(16) {} 'Salt mit 16 Bytes
    14. rng.GetBytes(mySaltBytes)
    15. 'Passwort & Salt in RFC
    16. Dim myRFC As New Rfc2898DeriveBytes(myPassword, mySaltBytes, 1000)
    17. Dim myRFCBYres As Byte()
    18. myRFCBYres = myRFC.GetBytes(32) 'RFC mit 32 Bytes
    19. '------------------------------------------------------------------------------
    20. 'Encrypt
    21. Dim mySaltString As String
    22. mySaltString = Convert.ToBase64String(mySaltBytes)
    23. Dim myEncryptedString As String
    24. myEncryptedString = Convert.ToBase64String(myRFCBYres)
    25. 'Decrypt
    26. Dim ConvertFromSalt As Byte()
    27. ConvertFromSalt = Convert.FromBase64String(mySaltString)
    28. Dim ConvertFromEncrypted As Byte()
    29. ConvertFromEncrypted = Convert.FromBase64String(myEncryptedString)
    30. End Sub
    31. End Class


    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Lingo“ ()

    fein - was kommt denn als Cyphertext raus, wenn ich Klartext "Hallo Welt" eingebe, mit Passwort "WaldWiese"?

    Und mit dem Passwort muss man ja den Cyphertext wieder entschlüsseln können - also ich sehe überhaupt nicht, wie das mit deinem Code vonstatten gehen soll.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich hab Dir mal in mein Diagramm eingezeichnet, was Du gerade gemacht hast (Ich gehe von Edit 22:04 aus):

    Was ErfinderDesRades aber gemeint hat ist folgendes:

    Du verschlüsselst nirgends, sondern Du verwendest einfach 32 Bytes, die eigentlich als Key/IV verwendet werden sollten. Ist Dir mal aufgefallen, dass da nur ein Passwort drin steht?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Mit den neuen Erkenntnissen, welche ich selber gemacht habe ist nun folgender Code enstanden:

    edit 09:10Uhr

    VB.NET-Quellcode

    1. Public Sub Encrypt()
    2. '--------------------------------------------------
    3. '----------------Salt Ast [LINKS]------------------
    4. '--------------------------------------------------
    5. 'Salt (Byte[])
    6. Dim rng = New RNGCryptoServiceProvider()
    7. Dim Salt = New Byte(16) {} 'Salt mit 16 Bytes
    8. rng.GetNonZeroBytes(Salt)
    9. 'Salt (String)
    10. Dim SaltString As String
    11. SaltString = Convert.ToBase64String(Salt)
    12. '--------------------------------------------------
    13. '----------------Daten Ast [RECHTS]----------------
    14. '--------------------------------------------------
    15. Dim DatenKlarText As String = "Hallo Welt"
    16. Dim Daten As Byte() = Encoding.ASCII.GetBytes(DatenKlarText)
    17. '--------------------------------------------------
    18. '----------------Passwort Ast [MITTE]--------------
    19. '--------------------------------------------------
    20. Dim PasswortKlarText As String = "WaldWiese"
    21. Dim Passwort As Byte() = Encoding.ASCII.GetBytes(PasswortKlarText)
    22. Dim myRFC As New Rfc2898DeriveBytes(Passwort, Salt, 1000)
    23. Dim AESProvider As New AesCryptoServiceProvider
    24. With AESProvider
    25. .Key = myRFC.GetBytes(32)
    26. .IV = myRFC.GetBytes(32)
    27. .CreateEncryptor(.Key, .IV)
    28. End With
    29. End Sub


    Wie ihr seht halte ich mich strikt an die Bilder von Niko Ortner .
    Die Kommentare Links,Rechts,Mitte sind die Aeste,welche auf dem Bild zu sehen sind.

    Ich habe nun Probleme bei der Umsetztung von ICryptoTransform.
    Kann mir da jemand bitte einen Anstoss geben?

    Freundliche Grüsse

    Lingo

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Lingo“ ()

    ich denke iwie ganz anners.
    Für mich ist Crypten eine Frage von Input/Output, und zwar hin- und zurück.
    Also nur mit einer einzigen Methode kann das schon von vorneherein keinen Sinn ergeben.

    Man braucht 2 Methode, eine zum crypten, und eine zum decrypten.
    Code erstmal diese beiden, und überleg dir, was man denen übergeben muss, und was sie zurückgeben - lass den Inhalt erstmal leer.

    Poste mal die Hüllen, und erst danach über die Füllung nachdenken (die sich vlt. an Nikos Flussdiagramm orientiert - ich habs nicht so mit Flussdiagramme).
    (Edit:
    Gute Idee. Je weniger Abhängigkeiten die Funktion hat (z.B. globale Variablen), desto leichter kann man sie wieder verwenden. Also sollte(n) die Funktion(en) alle benötigten Daten über Parameter bekommen und alle Ergebnisse als Rückgabe-Werte zurückgeben.
    )

    Wie bereits erwähnt solltest Du nicht ASCII-Encoding verwenden.

    Niko Ortner schrieb:

    denn das ist ein 7-Bit-Zeichensatz. Keiner kann sagen, was herauskommt, wenn Du versuchst, aus Bytes > 127 wieder ein Zeichen zu machen. Ich würde UTF-8 empfehlen, bin aber mit ANSI (Encoding.Default) bisher problemlos zurechtgekommen.

    Bis Zeile 28 sieht's ansonsten ganz gut aus.

    Die Klassen, die die Algorithmen kapseln, implementieren fast immer IDisposable, also Using verwenden
    Das gleiche gilt für das ICryptoTransform-Objekt, das von der CreateEncryptor- und CreateDecryptor-Funktion zurückkommt. Und für alle Streams.

    In etwa würde das jetzt so aussehen (Ich verwende AesManaged, weil ich mich damit auskenne, aber theoretisch kann man den Algorithmus austauschen.

    VB.NET-Quellcode

    1. Using Provider As New AesManaged()
    2. Provider.Mode = CipherMode.CBC
    3. Provider.BlockSize = 128
    4. Provider.Padding = PaddingMode.ISO10126
    5. Provider.Key = ByteSoruce.GetBytes(32)
    6. Provider.IV = ByteSource.GetBytes(16)
    7. Using Transform = Provider.CreateEncryptor()
    8. Using TargetStream As New MemoryStream()
    9. Using CStream As New CryptoStream(TargetStream, Transform, CryptoStreamMode.Write)
    10. 'Hier mit CStream.Write die Daten reinschieben.
    11. End Using
    12. 'Und hier mit TargetStream.ToArray wieder rausholen.
    13. End Using
    14. End Using
    15. End Using
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @ErfinderDesRades
    Wenn ich das ganze geschafft hab werde ich daraus natürlich Funktionen machen.
    Aber für mich ist es jetzt so besser verständlich.

    @Niko Ortner
    Das mit dem ASCII habe ich ganz vergessen. --> direkt verbessert

    Hier ist nun mein Code:

    Code

    VB.NET-Quellcode

    1. '--------------------------------------------------
    2. '----------------Salt Ast [LINKS]------------------
    3. '--------------------------------------------------
    4. 'Salt (Byte[])
    5. Dim rng = New RNGCryptoServiceProvider()
    6. Dim Salt = New Byte(15) {} 'Salt mit 16 Bytes
    7. rng.GetNonZeroBytes(Salt)
    8. 'Salt (String)
    9. Dim SaltString As String
    10. SaltString = Convert.ToBase64String(Salt)
    11. '--------------------------------------------------
    12. '----------------Daten Ast [RECHTS]----------------
    13. '--------------------------------------------------
    14. Dim DatenKlarText As String = "Hallo Welt"
    15. Dim Daten As Byte() = Encoding.UTF8.GetBytes(DatenKlarText)
    16. '--------------------------------------------------
    17. '----------------Passwort Ast [MITTE]--------------
    18. '--------------------------------------------------
    19. Dim PasswortKlarText As String = "WaldWiese"
    20. Dim Passwort As Byte() = Encoding.UTF8.GetBytes(PasswortKlarText)
    21. Dim myRFC As New Rfc2898DeriveBytes(Passwort, Salt, 1000)
    22. Using AESProvider As New AesCryptoServiceProvider
    23. AESProvider.Mode = CipherMode.CBC
    24. AESProvider.BlockSize = 128
    25. AESProvider.Padding = PaddingMode.ISO10126
    26. AESProvider.Key = myRFC.GetBytes(AESProvider.Key.Length)
    27. AESProvider.IV = myRFC.GetBytes(AESProvider.IV.Length)
    28. Using ICTransform = AESProvider.CreateEncryptor()
    29. Using MStream As New MemoryStream
    30. Using CStream As New CryptoStream(MStream, ICTransform, CryptoStreamMode.Write)
    31. CStream.Write(AESProvider.IV, 0, AESProvider.IV.Length)
    32. CStream.Write(myRFC.Salt, 0, 16)
    33. End Using
    34. Dim resultCrypt As String
    35. resultCrypt = Convert.ToBase64String(MStream.ToArray())
    36. End Using
    37. End Using
    38. End Using


    Jedoch erhalte ich im resultCrypt nicht das gleiche wie du. Aber ich denke, dass ist eigentlich logisch da wir ja unterschiedliche Salts haben?

    Salt: "qJuXe6+j54YGseJ2n8Wbxw=="
    resultCrypt: "5x2G+3R44wd4kOwTRgh7q4CCgFhIrLtEYGieQLvTaw9VgCQMJK0xtJzyxiOME/Rm"

    Wenn du dies mit deinem Tool Decryptest solltest du doch theoretisch auf meinen oben eingegeben wert kommen,oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lingo“ ()

    Ja, dass nicht das selbe herauskommt, ist der Sinn des Salts.
    Aber ich vermisse bei Deinem Code die Verwendung der "Daten"-Variable.
    Du schreibst in den Stream den IV und den Salt hinein (was eigentlich nicht nötig ist, denn um das kümmert sich der CryptoServiceProvider).
    Schreibe in den Stream nur die Daten hinein.
    Poste Dein Ergebnis dann nochmal, dann entschlüssle ich es bei mir und schaue, ob das gleiche herauskommt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ist mir auch gerade aufgefallen, dass ich das Daten Array gar nich benutzte^^

    Hier mein Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. '--------------------------------------------------
    2. '----------------Salt Ast [LINKS]------------------
    3. '--------------------------------------------------
    4. 'Salt (Byte[])
    5. Dim rng = New RNGCryptoServiceProvider()
    6. Dim Salt = New Byte(15) {} 'Salt mit 16 Bytes
    7. rng.GetNonZeroBytes(Salt)
    8. 'Salt (String)
    9. Dim SaltString As String
    10. SaltString = Convert.ToBase64String(Salt)
    11. '--------------------------------------------------
    12. '----------------Daten Ast [RECHTS]----------------
    13. '--------------------------------------------------
    14. Dim DatenKlarText As String = "Hallo Welt"
    15. Dim Daten As Byte() = Encoding.UTF8.GetBytes(DatenKlarText)
    16. '--------------------------------------------------
    17. '----------------Passwort Ast [MITTE]--------------
    18. '--------------------------------------------------
    19. Dim PasswortKlarText As String = "WaldWiese"
    20. Dim Passwort As Byte() = Encoding.UTF8.GetBytes(PasswortKlarText)
    21. Dim myRFC As New Rfc2898DeriveBytes(Passwort, Salt, 1000)
    22. Using AESProvider As New AesCryptoServiceProvider
    23. AESProvider.Mode = CipherMode.CBC
    24. AESProvider.BlockSize = 128
    25. AESProvider.Padding = PaddingMode.ISO10126
    26. AESProvider.Key = myRFC.GetBytes(AESProvider.Key.Length)
    27. AESProvider.IV = myRFC.GetBytes(AESProvider.IV.Length)
    28. Using ICTransform = AESProvider.CreateEncryptor(AESProvider.Key, AESProvider.IV)
    29. Using MStream As New MemoryStream
    30. Using CStream As New CryptoStream(MStream, ICTransform, CryptoStreamMode.Write)
    31. CStream.Write(Daten, 0, Daten.Length)
    32. End Using
    33. Dim resultCrypt As String
    34. resultCrypt = Convert.ToBase64String(MStream.ToArray())
    35. End Using
    36. End Using
    37. End Using


    Salt: "hsL+zJ9s3IsOUgUtsgr+DQ=="
    resultCrypt: "GjyfIzRl/4y5hcEr+JQ+Dw=="
    Jo, das sieht gut aus.
    Mal sehen, ob bei mir das richtige herauskommt...
    Hallo Welt
    Jup, passt.

    myRFC.GetBytes(AESProvider.Key.Length)
    Da solltest Du aber aufpassen. Ich würde nicht davon ausgehen, dass von anfang an ein passender Schlüssel drin steht. Ich würde die Schlüssellänge von Hand vorgeben. Die Länge des InputVectors kann man aber berechnen. Die entspricht nämlich der Blockgröße. Da diese in Bits angegeben ist, muss man nur duch 8 dividieren (Integerdivision mit '\', und nicht mit '/')
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Niko Ortner
    Nice, freue mich sehr :thumbsup:

    Das wären dann 16 Bytes. Theoretisch könnte ich die BlockSize auf 256 setzten und somit hätte ich eine AES256 Bit Verschlüsselung?

    Noch eine Verständnisfrage:
    - Es ist mir klar, dass ich ein Passwort gebrauche um Daten zu Verschlüsseln. (Da diese in Blöcke verschlüsselt werden und der erste "Block" ein Wert benötigt.) --> @ErfinderDesRades Danke für das Tutorial :)
    AAAABER wenn ich nun nur ein String verschlüsseln will wie "Hallo Welt" wie gehe ich denn da vor? Bzw. meine Frage ist: Kann ich das Passwort Hardgecodet im Code lassen oder sollte dieses auch dynamisch für jede neue Verschlüsselung erstellt werden?
    @ErfinderDesRades
    Das ist mir schon klar. Aber ich glaube wir haben gerade zwei verschiedene Ansichten des Passworts.

    Ich versuche zu erklären:

    Wir haben einen Login:
    myUsername = "Lingo"
    myPassword = "SecretPassword"

    Nach dem Schema von Niko Ortner brauchen wir für die Verschlüsselung ein Salt,Daten (welche verschlüsselt werden sollen-->in unserem Fall "myPassword") & ein Passwort wie im Beispiel Oben "WaldWiese" (Damit der erste Byte Block verschlüsselt werden kann).

    Ich hoffe meine Frage von #18 ist nun verständlich :/