Ich arbeite an einem Projekt, das eine einfache ASCII-TXT-Datei als Schlüssel/Wert-Konfigurationsdatei verwendet. Das aktuelle Format für ConfigFile.txt ist so etwas wieEinschließlich Steuerzeichen in einer TXT-Datei, die von C# gelesen werden kann
Vorname = Elmer | Name = Fudd | UserId = EFudd | Passwort = fubar | Date = 7/29/2016
Dies ist einfach, in der lesen Programm und ein Wörterbuch mit KeyValuePairs mit Code etwas schaffen wie:
using (FileStream fs = new FileStream("ConfigFile.txt", FileMode.Open))
{
using (StreamReader sr = new StreamReader(fs))
{
string fileText = sr.ReadToEnd();
// Tokenize the entire file string into separate key=value strings.
string[] tokens = fileText.Split('|');
// Iterate through all of the key=value strings, tokenize each one into a key=Value
// pair and add the key and value as separate strings into the dictionary.
foreach (string token in tokens)
{
string[] keyValuePair = token.Split('=');
configDict.Add(keyValuePair[0], keyValuePair[1]);
}
}
}
Es spaltet zunächst jeden Schlüssel/Wert als separate Zeichenfolge aus mit dem ‚|‘ als Trennzeichen.
Vorname = Elmer
Name VZ = Fudd
UserId = EFudd
Passwort = foobar
Date = 7/29/2016
Dann wird für jeden Schlüssel/Wert string, trennt den Schlüssel und den Wert für das Trennzeichen "=", erstellt ein KeyValuePair und fügt es in ein Wörterbuch für spätere Suchvorgänge im Programm ein.
So weit so gut. Benutzer werden angewiesen, keine Kennwörter mit einem Trennzeichen zu erstellen. Allerdings muss ich nun das Passwort verschlüsseln, bevor es in die Datei eingefügt wird, und die Verschlüsselungsroutine kann jedes druckbare Zeichen von 0x20 bis 0x7F erzeugen. Ein verschlüsseltes Passwort kann also mit einem oder beiden der Begrenzer enden. Ich kann am Ende mit "Foobar" (oder was auch immer) durch die Verschlüsselungs-Engine in P # | = g% verschlüsselt werden. Dies beeinträchtigt die Fähigkeit der Split-Funktion, ordnungsgemäß zu arbeiten.
Also, ich möchte die Trennzeichen in die Notepad TXT-Datei geändert, um Zeichen zu steuern, so dass anstelle der '|' Trennzeichen, ich benutze 0x1E (Record Separator) und ersetze das '=' Zeichen mit 0x1F (Unit Separator).
Ich kann es entkommen und Code direkt in C# ohne Probleme, aber wie würde ich die ursprüngliche TXT-Datei ändern, so dass es die Trennzeichen als einzelne (nicht druckbare) Zeichen richtig lesen?
Warum sind Passwörter Klartext? Verwenden Sie einen Hash und verwenden Sie dann base64 oder hex zum Kodieren der Binärdatei. –
Wie Sie die Datei lesen, tun Sie es genau so, wie Sie gerade die Datei lesen. Wenn Sie verrückt werden möchten, können Sie auf den rohen Datei-Stream zugreifen, aber das erfordert mehr Aufwand, als sich auf SO zu konzentrieren. –
Ich erbte Klartext pwds. Ich schrieb ein Dienstprogramm, um sie an Ort und Stelle zu verschlüsseln, bevor der verschlüsselte Text von Hand in die Konfigurationsdatei eingegeben wurde, so dass kein Klartext auf der Festplatte oder im Arbeitsspeicher vorhanden ist. Die Anwendung verwendet die gleiche Verschlüsselung, um sie vor ihrer Verwendung zu entschlüsseln. – MiddleAgedMutantNinjaProgrammer