Announcement

Collapse
No announcement yet.

Stream verschlüsseln, geht das?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stream verschlüsseln, geht das?

    Hallo Ng,
    ich brauche mal einen Tipp, da ich irgendwie nicht richtig weiterkomme. Ich schreibe eine Applikation in der Bilder angezeigt werden. Ich möchte diese Bilder nun verschlüsselt speichern. Einen ersten Lösungsansatz habe ich auch: eine Sub, die Dateien ver- und entschlüsseln kann. Jedoch müsste ich erst die Datei unverschlüsselt speichern, was sicherlich nicht "sicher" ist.

    Nun hatte ich den Gedanken: Es müsste doch möglich sein, solch eine Ver- und Entschlüsselungsroutine im Stream zu implementieren, so das z.B. mein Picturecontrol von der Verschlüsselung nichts merkt. Ich gebe einfach nur das "alternative" Stream-Objekt an und los geht es. Das würde mir ermöglichen alle Ein- und Ausgaben des Programmes die einen Stream nutzen/bieten zu ent- oder verschlüsseln.

    Nun meine Frage: Geht das? und wenn ja: finde ich irgendwo Beispiele, damit ich es implementieren kann.
    Oder (da mir die Sicherheit wichtig ist) gibt es eine käufliche Lösung für Entwickler, die das kann?

    Ich bin für jede Hilfe dankbar.

    Georg

  • #2
    http://www.example-code.com/vbdotnet/aes_dataStream.asp
    Christian

    Comment


    • #3
      Im Framework findest du dazu den CryptoStream um einen Stream mit einem ~beliebigen~ Verschlüsselungsverfahren zu koppeln.

      Comment


      • #4
        Vielen Dank, für die Hilfe. Das hat mir auf den richigen Weg geholfen. Leider habe ich den ersten Tipp nicht richtig verstanden, da ich das Beispiel nicht nachvollziehen konnte.

        Aber der zweite Tipp mit dem CryptoStream, der war es. Ich habe es jetzt folgendermaßen gelößt:
        [highlight=vb.net]
        '----------------------------------------------------------------------------------------------
        Public Class Crypt
        Dim RijndaelManaged As New RijndaelManaged
        Dim sKey() As Byte
        Dim sIV() As Byte

        Public Sub New(ByVal sPassword As String, sInitKey As String)
        Dim encText As New System.Text.UTF8Encoding()
        sKey = encText.GetBytes(sPassword.PadRight(32, CChar("*")).Substring(0, 32))
        sIV = encText.GetBytes(sInitKey.PadRight(16, CChar("#")).Substring(0, 16))
        End Sub

        Public Function FileSaveStream(sDatei As String, iMode As FileMode) As System.IO.Stream
        Dim NewFileStream As New FileStream(sDatei, iMode)
        FileSaveStream = New CryptoStream(NewFileStream, RijndaelManaged.CreateDecryptor(sKey, sIV), CryptoStreamMode.Write)
        End Function

        Public Function FileLoadStream(sDatei As String, iMode As FileMode) As System.IO.Stream
        Dim NewFileStream As New FileStream(sDatei, iMode)
        FileLoadStream = New CryptoStream(NewFileStream, RijndaelManaged.CreateEncryptor(sKey, sIV), CryptoStreamMode.Write)
        End Function
        End Class
        '----------------------------------------------------------------------------------------------
        [/highlight]

        Ist das so OK und sicher, oder muss ich nochwas anpassen/verbessern?

        Vielen Dank nochmal.
        Zuletzt editiert von gfoidl; 08.08.2012, 21:11. Reason: Code Tags hinzugefügt

        Comment


        • #5
          In FileLoadStream willst du vermutlich CryptoStreamMode.Read benutzen.

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            In FileLoadStream willst du vermutlich CryptoStreamMode.Read benutzen.
            Ja Ralf, natürlich. Vielen Dank, ist mir noch nicht aufgefallen.

            Ich habe bereits eine Veränderung gemacht. Ich habe das CryptoStream-Objekt im Kopf der Klasse initialisiert, da ich auf einer MS-Seite gelesen habe, dass man nach dem Ver- oder Entschlüsselung umgehend die Klasse mit CryptoStream.Clear() "bereinigen" sollte, damit die/der Schlüssel nicht ausgelesen werden können.

            Comment

            Working...
            X