mir reicht's! Kryptostream muß her!



  • Hmm, jetzt ist die Phase wo ich mal was lernen kann - werd ich mir sofort anschauen deinen CryptoStream.

    MfG SideWinder



  • @Side
    Jetzt hast wenigstens schon mal gelernt, wie man es nicht machen sollte images/smiles/icon_smile.gif

    Damit das allen anderen erspart bleibt, habe ich die Datei erstmal wieder gelöscht. Sobald eine neue Version fertig ist, sage ich bescheid.



  • faulheit zahlt sich manchmal aus, ich war gestern zu faul mir dein code anzuckuen images/smiles/icon_smile.gif



  • Na dann, warten wir mal auf deine neue Version images/smiles/icon_wink.gif.

    MfG SideWinder



  • @Side und Dimah
    Keine Angst, die erste Version war auch nicht ganz falsch. Ich habe da nur den Puffer nicht richtig genutzt. Insofern war sie wenig effizient.

    Ich habe jetzt mal die neue Version hochgeladen, die Lesen und Schreiben in Ansätzen unterstützt und den Puffer wesentlich effizienter einsetzt (genauer gesagt setzt sie diesen jetzt richtig ein). Allerdings fehlen da noch ne riesen Menge Sachen (steht auch den Kommentaren).

    Da ich aber in der nächsten Zeit aus studiumtechnischen Gründen nur wenig Zeit habe, gebe ich euch lieber jetzt schon mal die halbfertige Version. Vielleicht kann der ein oder andere von euch ja anhand des Codes die fehlenden Teilstücke einbauen.

    Der Link ist wieder: http://fara.cs.uni-potsdam.de/~kaufmann/CryptoStream.h

    @Volkard
    Kannst du noch mal auflisten, was du alles haben wolltest.
    Ich kann mich leider nicht mehr an alles erinnern images/smiles/icon_sad.gif



  • Na dann, schau ich mir das mal an - und Gnade dir Gott ich finde einen Fehler images/smiles/icon_wink.gif.

    MfG SideWinder



  • Tja, und beim Anschauen tauchen auch schon die ersten Fragen auf:

    1.) Gehe ich richtig in der Annahme das die Methode setbuf() in std::filebuf, die Information setzt von wo bis wo der Puffer verläuft?

    2.) Was bringt mir die Methode seekoff()?

    3.) Sollte file.open() nicht bei Fehlschlag (ich meine den, wo schon geöffnet wurrde) ebenfalls 0 zurückgeben?

    4.) Warum setzt du hier Ret nochmals auf dieselbe Adresse?:

    template < class C >
    std::filebuf* CryptoBuffer< C >:  :open(const char *s, std::ios_base:  :openmode mode)
    {
    using std::filebuf;
    filebuf* Ret = this;
    if (!m_IsOpen)
    {
    if (filebuf:  :open(s, mode))
    {
    m_IsOpen = true;
    Ret = this;                                                // HIER!
    m_Mode = mode;// openmode setzen
    setbuf(&m_Buffer[0], m_MaxBufSize);// Puffer setzen
    }
    else
    Ret = 0;
    
    }
    

    5.) Warum benützt du hier nicht maxbufsize?:

    template < class C >
    std::filebuf* CryptoBuffer< C >::close()
    {
    using std::filebuf;
    
    if (!m_IsCrypted && (m_Mode & ios:  :out))
    {// Sicherstellen, dass auch alle Daten verschlüsselt und geschrieben werden.
    std::streamsize Size = pptr() - pbase();                   // HIER!
    m_Algo.crypt(&m_Buffer[0], (&m_Buffer[0]) + (Size -1));
    m_IsCrypted = true;
    }
    filebuf::sync();
    m_IsOpen = false;
    return filebuf::close();
    }
    

    MfG SideWinder

    [ Dieser Beitrag wurde am 20.04.2002 um 16:28 Uhr von SideWinder editiert. ]



  • Hallo,
    also der Reihe nach:
    1. setbuf setzt einen Puffer. Du übergibst setbuf einen Zeiger auf den Beginn des Puffers und als zweiten Parameter die Länge des selbigen.

    2. seekoff wird aufgerufen, wenn der Benutzer eine Operation wie seekg oder seekp aufruft. Innherhalb von seekoff musst man sicherstellen, dass der get- bzw. set-Pointer richtig positioniert wird.

    3. Jo.
    4. Ist quatsch

    Die open-Methode sollte wohl eher so aussehen:

    template < class C >
    std::filebuf* CryptoBuffer< C >::open(const char *s, std::ios_base::openmode mode)
    {
        using std::filebuf;
        filebuf* Ret = 0;
        if (!m_IsOpen)
        {
            if (filebuf::open(s, mode))
            {
                m_IsOpen = true;
                Ret = this;
                m_Mode = mode;                      // openmode setzen
                setbuf(&m_Buffer[0], m_MaxBufSize); // Puffer setzen
            }   
        }
        return Ret;
    }
    

    5. Weil ich nicht davon ausgehen kann, dass m_MaxBufSize Zeichen im Puffer sind.
    Durch std::streamsize Size = pptr() - pbase();
    bestimme ich, wieviele Zeichen tatsächlich im Puffer stehen. Und genau diese Anzahl von Zeichen wird auch verschlüsselt.
    Die -1 ist allerdings quatsch!



  • Na, dann thanx - werds mir dann noch detaillierter ansehen ;).

    MfG SideWinder



  • Kommen jetzt Verschlüsselungs-Klassen auch noch oder belassen wirs hier auf a? Ich mein: Was bringt mir ein toller Einbau in die Stream-Klassen wen ich nicht mal einen Algo habe der eingefügt werden kann?

    MfG SideWinder



  • Original erstellt von SideWinder:
    Kommen jetzt Verschlüsselungs-Klassen auch noch oder belassen wirs hier auf a? Ich mein: Was bringt mir ein toller Einbau in die Stream-Klassen wen ich nicht mal einen Algo habe der eingefügt werden kann?
    MfG SideWinder

    Die Burrows-Wheeler-Transformation hab ich irgendwo rumfliegen...
    Ähm, wißt ihr was? Vielleicht war der Gedanke mit dem Blockweise-Vorgehen gar net so ultraklug. Aber egal. Ne Lösung, die geht, wär ja vollauf genug, erstmal egal, welche.



  • @Volkard
    Kannst du noch mal auflisten, was du alles haben wolltest.

    Sammelt mal Ideen, was man alle brauchen könnte.



  • Hi,

    um den Thread nicht absterben zu lassen, da er ja sehr interessant ist:

    Wie waers, wenn wir so Verfahren wie XOR, Rot13, Blowfish und sowas
    implementieren??

    mfg
    v R



  • Ich weiß, dass ich von Kryptographie keine Ahnung habe, aber ist XOR nicht ein Verfahren, welches nur in eine Richtung funktioniert?

    Übrigens kannst du gerne einmal eine Klasse Crypto bauen. Die Stream-Implementation ist fast fertig. Schau sie dir mal an und such dir die Methoden raus, die deine Klasse unterstützen muss.

    MfG SideWinder



  • Original erstellt von SideWinder:
    **Ich weiß, dass ich von Kryptographie keine Ahnung habe, aber ist XOR nicht ein Verfahren, welches nur in eine Richtung funktioniert?
    **

    XOR ist keine Hashfunktion. XOR ist sogar symmetrisch, du brauchst also keine extra Dechiffrierfunktion:
    E(E(M)) = M

    M: Plaintext


Anmelden zum Antworten