Hi Leute,
ich wollte mir vor einigen Wochen einen eigenen Cryptor schreiben.
Jetzt bin ich so weit, dass die Dateien eingelesen und verschlüsselt werden sollen. Das verschlüsseln klappt auch, aber wenn ich keine .bmp oder .txt Datei nehme, wird die Datei nciht vollständig eingelesen. Es werden immer nur die ersten paar Bytes eingelesen. Ich habe mir den Code der Funktion schon zig mal angesehen, konnte aber nichts finden. Vielleicht findet ihr ja was.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// Variablen
std::ifstream fOrginalFile;
std::ofstream fNewFile;
sHeader Header;
// Als erstes Parameter prüfen
// Existiert die Datei?
fOrginalFile.open(sFile.c_str());
if(fOrginalFile == NULL)
{
fOrginalFile.close();
return FILE_ERROR;
}
// Password prüfen
if(sPassword == "")
return WRONG_PASSWORD;
// Die Orginal Datei einlesen, verschlüssseln und abspeichern
// Die Endung der Datei herausfinden
std::string sType = sFileName;
int ipos = sType.find(".");
sType.erase(0, ipos);
// Pfad der neuen Datei zusammen basteln
// Wenn die Datei schon existiert, überschreiben
std::string stemp = sNewFile;
if(sNewFile.find(".crypt") == -1)
{
stemp += sType;
stemp += ".crypt";
}
fNewFile.open(stemp.c_str());
if(fNewFile == NULL)
{
fNewFile.close();
return FILE_ERROR;
}
// Header erstellen
int iChecksume = 12;
Header.iCryptVersion = 290809;
if(CryptValue((char*) &iChecksume, sPassword))
Header.iChecksume = iChecksume;
else
return UNKNOWN_ERROR;
// Header in die Datei schreiben
fNewFile.write((char*) &Header, sizeof(Header));
// Und nun die eigentliche Datei verschlüsseln
while(!fOrginalFile.eof())
{
// Wert einlesen
char Buffer;
fOrginalFile.read((char*) &Buffer, sizeof(Buffer));
// Und verschlüsselt abspeichern
if(CryptValue(&Buffer, sPassword))
fNewFile.write((char*) &Buffer, sizeof(Buffer));
else
{
fNewFile.close();
fOrginalFile.close();
return UNKNOWN_ERROR;
}
}
// Alles wieder schließen
fNewFile.close();
fOrginalFile.close();
// Wenn die Orginal Datei gelöscht werde soll, löschen
if(bDelete == true)
{
// Erst noch überschreiben, damit man sie nicht wiederherstellen kann
FILE * fFile;
fFile = fopen(sFile.c_str(), "w+");
fclose(fFile);
remove(sFile.c_str());
}
return OK;
|
Wie immer bedanke ich mich für Hilfe schon mal im Voraus.[/cpp]