Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Datei verschlüsseln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.04.2007, 03:18 Uhr
~samson4
Gast


hi,
ich wollte fragen wie man eine Datei verschlüsseln kann? Ich arbeite mit BCB 6

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.04.2007, 03:40 Uhr
0xdeadbeef
Gott
(Operator)


Typischerweise würde man dafür eine Verschlüsselungsbibliothek wie openssl oder gcrypt rannehmen, den Inhalt der Date da durchjagen und wieder zurückschreiben. Die genaue Implementierung hängt dann von der Bibliothek ab, aber die Bibliotheken sind in aller Regel gut dokumentiert.

Welches Verschlüsselungsverfahren solls denn sein? Bzw, beschreib das Problem doch mal etwas genauer.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.04.2007, 13:21 Uhr
~samson4
Gast


hi,
ich will/muss ein Programm schreiben mit dem man eine Datei lädt, dann sagt Codieren und dann erhält man eine Datei die nur mit diesem Programm und dem vorher eingegebenen Passwort zurückcodiert werden kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.04.2007, 18:16 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Dass du die Datei nur mit diesem Passwort wider entschlüsseln kannst, ist nicht schwer zu machen. Dass du die Datei hingegen nur mit deinem Programm auch wieder entschlüsseln kannst, dürfte sich als wesentlich schwierig bis unmöglich erweisen, da alle wichtigen Algorithmen offen sind (kryptographischer Grundsatz: Die Stärke eines Verschlüsselungsalgorithmus darf nicht davon abhängen, ob der Algorithmus an sich offen gelegt ist, oder nicht).

Alles, was du brauchst, ist dementsprechend eine Verschlüsselung. Da gibt es etliche, z.B. Blowfish. Selber Programmieren wird da fpr dich vermutlich nicht drin sein (ich impliziere jetzt mal ganz frech, dass du du kein Sicherheitsexperte für technische Kryptographie bist ). In sofern brauchst du eine vorgefertigte lib. Wie unser Schnitzel (sorry ) schon anmerkte, hängt die Einbindung dann von der jeweiligen lib ab.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.04.2007, 18:43 Uhr
~samson4
Gast


Das mit das es mit dem Programm decodert werden kann war mehr so gemeint das mein Programm das überhaupt kann *g*.

Kann mir das einer mit einer Lib die er sich ausscht mal erklären?

@ReyX: DU hast recht ich bin kein Sicherheitsexperte *g*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.04.2007, 11:13 Uhr
Th



Such mal bei www.koders.com/ nach Blowfish (mit Language-Filter C bzw. C++). Dort sind viele Implementierungen vorhanden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.04.2007, 12:16 Uhr
RedEagle



Soll es eine Synchrone oder Asynchrone verschlüsslung sein???

Wenn du einfach nur verhindern möchtest, das deine Freunde deine Hausaufgaben lesen, reicht eignetlich ne einfache XOR-Verschlüsselung...


C++:
  string crypt(string text, string pw)
  {
   for(int i = 0; i < text.size(); ++i)
   {
    text[i] = text[i] ^ pw[i % pw.size()];
   }
   return text;
  }



Wenn es dir aber wirklich um sicherheit geht, würde ich wirklich etwas anderes Nehmen (wie oben schon öffters erwähnt)
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.04.2007, 17:58 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab da mal grad was zusammengeschustert. Auf UNIX mit gcrypt sieht das so aus:

C++:
#include <gcrypt.h>

#include <pwd.h>
#include <unistd.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BLOCKSIZE 512
#define KEYSIZE   32

#define SALT      "fia921m dwq+=**"
#define SALT_SIZE sizeof(SALT)

#define RUN_AND_CHECK(call) {                                                    \
  gcry_error_t err = 0;                                                          \
  err = call;                                                                    \
  if(err) {                                                                      \
    fprintf(stderr, "Fehler: Zeile %d: %s/%s\n", __LINE__, gcry_strsource(err), gcry_strerror(err)); \
    return -1;                                                                   \
  }                                                                              \
}

int main(int argc, char *argv[]) {
  gcry_md_hd_t     hash;
  gcry_cipher_hd_t cipher;
  char *pass;
  FILE *in, *out;
  char inbuf[BLOCKSIZE], outbuf[BLOCKSIZE];
  size_t chars_read;

  if(argc != 4 || !strchr("de", argv[1][0])) {
    return -1;
  }

  gcry_check_version(NULL);

  RUN_AND_CHECK(gcry_cipher_open(&cipher,
                                 GCRY_CIPHER_AES256,
                                 GCRY_CIPHER_MODE_CFB,
                                 0));
  RUN_AND_CHECK(gcry_md_open(&hash, GCRY_MD_SHA256, 0));

  pass = getpass("Schlüssel: ");

  gcry_md_write(hash, pass, strlen(pass));
  gcry_md_final(hash);

  RUN_AND_CHECK(gcry_cipher_setkey(cipher, gcry_md_read(hash, GCRY_MD_SHA256), KEYSIZE));
  RUN_AND_CHECK(gcry_cipher_setiv(cipher, SALT, SALT_SIZE));

  in  = fopen(argv[2], "r");
  out = fopen(argv[3], "w");

  while((chars_read = fread(inbuf, sizeof(char), BLOCKSIZE, in)) > 0) {
    switch(argv[1][0]) {
    case 'd':
      RUN_AND_CHECK(gcry_cipher_decrypt(cipher, outbuf, chars_read,
                                                 inbuf, chars_read));
      break;
    case 'e':
      RUN_AND_CHECK(gcry_cipher_encrypt(cipher, outbuf, chars_read,
                                                 inbuf, chars_read));
    }

    fwrite(outbuf, sizeof(char), chars_read, out);
  }

  fclose(out);
  fclose(in);

  gcry_md_close(hash);
  gcry_cipher_close(cipher);

  memset(  pass, 0, strlen(pass));
  memset(outbuf, 0, BLOCKSIZE);
  memset( inbuf, 0, BLOCKSIZE);

  return 0;
}


...unter Windows müsste man im Wesentlichen die getpass-Funktion ersetzen, um das Passwort aus einer sicheren Quelle zu kriegen, der Rest geht da genauso.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 10.04.2007 um 18:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.04.2007, 18:19 Uhr
~samson4
Gast


hi,

Danke funktioniert gut, bloß wenn man große Dateien versc/Ent schlüsselt hängt sich das Programm für eine halbe Minute einfahc auf und läuft erst danach weiter wei kann ich das ändern, dass man das Fenster nachdem man es minimiert hat auch während das verschlüsseln weider öffnen kann?

mfg Samons
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.04.2007, 19:54 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du sicher bist, dass du die Bibliothek nur in einem Thread benutzt, kannst du den einfach in den Hintergrund schalten - wie halt üblich. Ansonsten musst du vorher ein paar Callback-Funktionen registrieren, dabei gehts vor allem um Mutex-Locking. Für POSIX-Threads und die alte GNU pth-Implementierung gibt es da bereits vorgefertigte Makros, für Windows allerdings wirst du den Kram ggf. selbst schreiben müssen.

Siehe auch www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: