Frage

Ich habe ein Problem, während einige Daten in der Datei zu verschlüsseln. Ich verwende einfach xor dafür. können sagen, ich diese Struktur haben:

struct MyFile{
char fileName[128];
int account;
float balance;};

Speicher diesen als Binärdatei ordnungsgemäß funktioniert, aber wenn ich verwende xor die Dateinamen in der Struktur zu verschlüsseln und die Struktur zu hd speichern Sie dann die Struktur zu lesen und die Dateinamen zu entschlüsseln zeigt die Zeichen nicht richtig. Ich verwende diese einfache Funktion für die Verschlüsselung / Entschlüsselung Zweck.

static void Codec(const char *key,int keySize,char* in,char *result,int length)  
{
    for(int i=0;i<length;i++)
        result[i]=in[i]^key[i%keySize];
}

Beachten Sie, dass, wenn ich den Dateinamen verschlüsseln und direkt im Speicher entschlüsseln ist das Ergebnis stimmt. Was bin ich dabei, wie, warum es geändert wird, wenn auf der Festplatte gespeichert. antworten Sie bitte so bald wie möglich und tnx im Voraus ...

War es hilfreich?

Lösung

Beachten Sie, dass Sie die Dateien im Binär-Modus ( „rb“ / „wb“ statt „r“ / „w“ für fopen) öffnen müssen. Windows-C-Implementierungen insbesondere Probleme bei \n haben <->. \r\n Umwandlung

Es ist auch eine gute Idee, um den Einsatz unsigned chars für arithmetische und bitweise Operationen; alles andere als 8-Bit-Zweier-Komplement unterzeichnet Zeichen könnte zu Problemen führen (die gewährt, die meisten Implementierungen verwenden und möglicherweise nicht Ursache irgendwelche Probleme mit symmetrischen XOR-Verschlüsselung, aber es ist immer noch gut, vorsichtig zu sein.)

Andere Tipps

Sie zuerst fest, ob die Daten tatsächlich geändert werden, wenn es auf die Platte geschrieben wird. Ihr Programm Ausdruck der Zeichenfolge in diesen vier Orten:

  1. es vor der Verschlüsselung
  2. Nach der Verschlüsselung aber bevor es auf die Festplatte zu schreiben
  3. Nachdem es von der Platte zu lesen, aber bevor es zu entschlüsseln
  4. Nach Entschlüsselung

Sind die Ergebnisse von # 2 und # 3 die gleiche? Wenn ja, dann wird die Datei während der Übertragung auf der Festplatte und nicht zurück wird geändert.

Wenn # 2 und # 3 verschieden ist, versucht, die unverschlüsselte Zeichenfolge auf der Festplatte zu schreiben und liest es wieder heraus. Ist diese Arbeit erfolgreich?

Schreiben nur eine einzige solche Struktur in eine Datei und prüfen Sie den Inhalt der Datei in einem Hex-Editor. Wie sieht die Datei aussehen, während es auf der Festplatte?

Veröffentlichen Sie Ihre Schreib-to-Disk und schreib von Platten-Code als auch einen Teil des Problems kann es liegen.

Sie müssen die Datei in Binär-Modus öffnen. Wenn Sie C I / O dieses Mittel (wie ich es normalerweise tun)

FILE *input_file = fopen(input_file_name, "rb");
FILE *output_file = fopen(output_file_name, "wb");

Wenn Sie stattdessen habe in mit C betrogen worden ++ Ströme dieses Mittel

std::ifstream input_file(input_file_name, ios::in | ios::binary);
std::ofstream output_file(output_file_name, ios::out | ios::binary);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top