Verschlüsselung von Dateien



  • Hallo !

    Suche eine kleine, einfach zu verwendende Bibliothek für mein C++ Programm zum Ver- und Entschlüsseln von Dateien.

    Folgende hab ich mir schon angesehen:

    Crypto++: Zu groß bzw. kein Tutorial gefunden wie ich eine Datei verschlüsseln kann

    KeeCryptLib: Einfach und leicht zu einbinden, aber liefert bei mir einen Speicherfehler -> wäre mein Favorit gewesen aber bekommen den Fehler leider nicht weg !

    (Link: http://www.dominik-reichl.de/opensource.shtml#keecryptlib)

    dw = lpKcEncryptFile(TRUE, "test.xml", "test.xml.enc", "TheKey");
    

    Kompiliert normal aber in dieser Zeile schmeißt es ihn raus !

    Was wäre nun zu empfehlen und wo finde ich auch Tutorials bzw Beispielcode dazu !?
    (muss nicht unknackbar sein sondern einen rudimentären Schutz bieten)

    Danke für die Antworten !

    mfg leon22

    PS: Verwende Visual Studio 2005 unter Windows 2000



  • Hier zwei Seiten für Crypto++
    http://www.codeproject.com/KB/tips/CryptoPPIntegration.aspx
    http://69.10.233.10/KB/cpp/RsaSignatureAppendix.aspx

    Edit: mit google findet man schon noch Bsp.

    Simon



  • Kompiliert normal aber in dieser Zeile schmeißt es ihn raus !

    Was heisst das? Runtime Error, Linker Error? Exceptions?



  • Fehler:

    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    mfg



  • Anscheinend hab ich mit dieser conversation Probleme:

    Methoden Parameter

    void ScrambleFile::EncryptXmlFile(string &input_filename, string &output_filename)
    

    und dann diese Zeile

    dw = lpKcEncryptFile(TRUE, input_filename.c_str(), output_filename.c_str(), "TheKey");
    

    Danke und mfg



  • Zeige mal mehr Code.



  • #include "ScrambleFile.h"
    
    #define KCF_NODECL
    
    HINSTANCE hLib;
    LPKCENCRYPTFILE lpKcEncryptFile;
    LPKCSELFTEST lpKcSelfTest;
    DWORD dw;
    
    ScrambleFile::ScrambleFile(void)
    {
    }
    
    ScrambleFile::~ScrambleFile(void)
    {
    }
    
    void ScrambleFile::EncryptXmlFile(string &input_filename, string &output_filename)
    {
    	hLib = LoadLibrary("H:/Projekt/source/MP300_TestSuite/debug/KeeCryptLib.dll");
    	if(hLib == NULL) cout << "Error: Cannot load KeeCrypt.dll library ! " << endl;
    
    	lpKcEncryptFile = (LPKCENCRYPTFILE)GetProcAddress(hLib, "KcEncryptFile");	
    
    	dw = lpKcEncryptFile(TRUE, input_filename.c_str(), output_filename.c_str(), "TheKey");
    
    	cout << "ScrambleFile Method " << input_filename << " " << output_filename << endl;
    
    	FreeLibrary(hLib); 
    	hLib = NULL;
    }
    


  • Es müsste allerdings ein dll Fehler sein (hab aber die dll vorher problemlos im eigenen VS2005 kompiliert) !



  • Hast Du LPKCENCRYPTFILE selbst definiert?
    Wie ist er definiert?



  • typedef DWORD(WINAPI *LPKCENCRYPTFILE)(BOOL bEncrypt, LPCTSTR lpInFile, LPCTSTR lpOutFile, LPCTSTR lpPassword);
    typedef DWORD(WINAPI *LPKCSELFTEST)();
    

    Wurde in der keecryptlib.h definiert (in ScrambleFile.h eingebunden)



  • Die 2 Zeilen

    typedef DWORD(WINAPI *LPKCENCRYPTFILE)(BOOL bEncrypt, LPCTSTR lpInFile, LPCTSTR lpOutFile, LPCTSTR lpPassword);
    typedef DWORD(WINAPI *LPKCSELFTEST)();
    

    mussten laut windef.h in

    typedef DWORD(WINAPIV *LPKCENCRYPTFILE)(BOOL bEncrypt, LPCTSTR lpInFile, LPCTSTR lpOutFile, LPCTSTR lpPassword);
    typedef DWORD(WINAPIV *LPKCSELFTEST)();
    

    geändert werden.

    Auszug:

    #define CALLBACK    __stdcall
    #define WINAPI      __stdcall
    #define WINAPIV     __cdecl
    

    Blöder Fehler - Danke trotzdem für die Hilfe !

    mfg



  • Hallo !

    Ausgehend vom vorherigen Verlauf möchte ich nun die entschlüsselte Datei nicht aufs Dateisystem schreiben sondern in einen Datenstrom (filestream) !

    hier wird entschlüsselt:

    dw = lpKcEncryptFile(FALSE, input_filename.c_str(), output_filename.c_str(), encKey.c_str());
    

    output_filename.c_str() wäre der Pfad zur Datei die dann entschlüsselt geschrieben wird -> möchte ich aber wie gesagt in ein Objekt kapseln ! nur wie ?

    Vielen Dank für Antworten !

    mfg


Anmelden zum Antworten