mir reicht's! Kryptostream muß her!



  • 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