Я работаю над проектом, который использует простой файл ASCII .txt в качестве файла конфигурации ключа/значения. Текущий формат для ConfigFile.txt что-то вродеВключая управляющие символы в TXT-файле, который должен быть прочитан C#
FirstName = Elmer | LastName = фадд | USERID = EFudd | Password = FuBar | Дата = 7/29/2016
Это легко считаны в программы и создать словарь с KeyValuePairs с кодом что-то вроде:
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]);
}
}
}
Это первое расщепляет каждый ключ/значение в виде отдельной строки с помощью «|» как разделитель.
FirstName = Элмер
LastName = фадд
UserId = EFudd
Password = Foobar
Дата = 7/29/2016
Затем для каждого ключа/значения string, он разделяет ключ и значение на разделителе '=', создает KeyValuePair и вставляет его в словарь для последующего поиска в программе.
Пока все хорошо. Пользователям предлагается не создавать пароли с разделителем. Однако теперь мне нужно зашифровать пароль, прежде чем включать его в файл, а процедура шифрования может выдавать любой печатный символ от 0x20 до 0x7F. Таким образом, зашифрованный пароль может заканчиваться одним или обоими разделителями. Я могу закончить «foobar» (или что-то еще), зашифрованное механизмом шифрования, в P # | = g%. Это испортило способность функции split работать правильно.
Итак, я хочу изменить разделители, введенные в файл Notepad .txt, для управления символами, чтобы вместо символа '|' delimiter, я использую 0x1E (разделитель записи) и заменяю знак '=' 0x1F (Unit Separator).
Я могу избежать и кодировать это прямо на C# без проблем, но как бы изменить исходный файл .txt-диска, чтобы он читал в разделителях как одиночные (непечатаемые) символы правильно?
Почему пароли ясного текста? используйте хэш, а затем используйте base64 или hex для кодирования двоичного файла. –
Что касается того, как читать файл, вы делаете это так же, как в настоящее время читаете файл. Если вы хотите сходить с ума, вы можете получить доступ к сырым файловым потокам, но это требует больше усилий, чем помощь в объяснении на SO. –
Я унаследовал открытые pwds. Я написал утилиту для шифрования их на месте до того, как зашифрованный текст вводится вручную в файл конфигурации, поэтому на диске или в памяти нет открытого текста. Приложение использует одно и то же шифрование для их незашифрования непосредственно перед их использованием. – MiddleAgedMutantNinjaProgrammer