Zusammenhang-Frage: struct -> stream -> encrypt -> Datei



  • Hallo,

    ich suche nach einer Lösung, um strukturierte Daten verschlüsselt in eine Datei zu schreiben.
    Die einzelnen Zutaten sind mir vertraut, nicht aber wie ich sie optimal in Zusammenhang bringe.

    Bisher speichere ich strukturierte Daten (noch) wie folgt ab - Danke bei der Gelegenheit für die Tipps aus der Gruppe, dass dies eine sehr unsichere Methode ist:

    // Anm. gvUebungPruefung ist ein Vector vom Typ TUebungPruefung
    ofstream outUP( (gasArbeitsVerz_Data + "\\" + asDateiName).c_str(), ios::binary);
    for (size_t i=0; i<gvUebungPruefung.size(); i++)
    {
        outUP.write( (char*) &gvUebungPruefung[i], sizeof(gvUebungPruefung[i]));
    }
    outUP.close();
    

    Daten eines Streams verschlüsselt in eine Datei zu schreiben, gelingt mit Hilfe des dcpcrypt2-Package von David Barton sehr ordentlich:

    bool __fastcall TDM::sub_Datei_verschluesseln(AnsiString asQuelle, AnsiString asZiel, AnsiString asKey)
    {
        bool bResult = false;
        TFileStream *Source, *FileDest;
        try
        {
            Source = new TFileStream(asQuelle, fmOpenRead);
            FileDest = new TFileStream(asZiel, fmCreate);
            TDCP_sha1 *hash = new TDCP_sha1(this);
            hash->Init();
            hash->UpdateStr(asKey);    // generate a hash of Edit1.Text
            unsigned char *ucDigest[20];
            hash->Final(ucDigest);            // save the hash in Digest
            hash->Free();
            hash = NULL;
    
            Cipher = new TDCP_rc4(this);
            Cipher->Init(ucDigest, sizeof(ucDigest)*8, NULL); // initialize the cipher with a hash of the passphrase
            Cipher->EncryptStream(Source, FileDest, Source->Size); // encrypt the contents of the file
            Cipher->Burn();
            Cipher->Free();
    
            delete Source;
            Source = NULL;
            delete FileDest;
            FileDest = NULL;
            bResult = true;
        }
        catch(Exception &e)
        {
            bResult = false;
        }
    
        return bResult;
    
    }
    //---------------------------------------------------------------------------
    

    Um nicht umständlich die Daten zunächst in eine Datei zu schreiben, die wiederum eingelesen werden muss, um dann als Stream erneut gespeichert zu werden, frage ich Euch, ob nicht folgende Variante sinnvoll ist:
    Strukturierte Daten per Methode ??? in TMemoryStream schreiben und diesen verschlüsselt via FileStream-Objekt in die Datei schreiben.

    Was meint Ihr?

    Gruß
    Leo



  • Natürlich ist es Quatsch die daten 2x in ein file zu schreiben. Kenne das dcpcrypt2-Package leider nicht, habe aber beim googlen heinweise dafür gefunden das eine methode Cipher->EncryptString() existiert. Ich würde also versuchen die Daten erst in einen String zu packen, dann EncryptString() darüber laufen lassen und dann erst zu speichern.
    Kurt



  • ZuK schrieb:

    (...) Ich würde also versuchen die Daten erst in einen String zu packen, dann EncryptString() darüber laufen lassen und dann erst zu speichern.
    Kurt

    Was heißt 'versuchen'?
    Und worin besteht der Unterschied, die Daten in einen String zu schreiben oder sie z.B. einem TMemoryStream zuzuweisen?

    Wäre dankbar für weitere Anregungen!

    Gruß
    Leo



  • Leo Freitag schrieb:

    Was heißt 'versuchen'?
    Und worin besteht der Unterschied, die Daten in einen String zu schreiben oder sie z.B. einem TMemoryStream zuzuweisen?

    Da ich keine Ahnung habe was ein TMemoryStream und AnsiString ist ( habe noch nie davon gehört, ist sicher kein std C++ ) könnte ich es nur versuchen.
    Kurt



  • Hallo

    das muß ins Builder-Forum.

    bis bald
    akari



  • akari schrieb:

    das muß ins Builder-Forum.

    Sir, Jawohl Sir 😉



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten