일반 ASCII .txt 파일을 키/값 구성 파일로 사용하는 프로젝트에서 작업 중입니다. 성 = 퍼드 | | 사용자 아이디 = EFudd | 비밀번호 = 망가 | ConfigFile.txt에 대한 현재의 형식은C#에서 읽을 .txt 파일에 제어 문자 포함
FIRSTNAME = 엘머 같은 것입니다 날짜 =이은으로 읽기 쉬운 7/2천16분의 29
프로그램과 같은 코드 뭔가 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]);
}
}
}
를 '|' 구분 기호로 사용합니다. = EFudd
비밀
FIRSTNAME = 엘머
성 = 퍼드
의 UserId = foobar와
날짜이어서
= 7/2천16분의 29, 각각의 키/값 문자열에서 '='구분 기호의 키와 값을 분리하고, KeyValuePair를 만들고, 프로그램에서 나중의 조회를 위해 사전에 삽입합니다.
지금까지 그렇게 좋았습니다. 사용자는 구분 기호로 암호를 생성하지 않도록 지시받습니다. 그러나 암호를 파일에 포함하기 전에 암호를 암호화해야하며 암호화 루틴은 0x20에서 0x7F까지의 인쇄 가능한 문자를 생성 할 수 있습니다. 따라서 암호화 된 암호는 구분 기호 중 하나 또는 둘 모두로 끝날 수 있습니다. 나는 결국 'foobar'(또는 무엇이든)를 암호화 엔진에 의해 P # = = g %에 암호화되도록 끝낼 수 있습니다. 이것은 분할 함수가 제대로 작동하는 능력을 망칩니다.
그래서 메모장 .txt 파일에 입력 된 구분 기호를 변경하여 문자를 제어하여 '|' 구분 기호, 나는 0x1E (레코드 구분 기호)를 사용하고 '='기호를 0x1F (단위 구분 기호)로 바꿉니다.
이 문제는 C#에서 아무 문제없이 직접 이스케이프 처리하고 코딩 할 수 있지만 원래 .txt 디스크 파일을 수정하여 구분 기호로 단일 (인쇄 할 수없는) 문자로 올바르게 읽도록하려면 어떻게해야합니까?
암호가 일반 텍스트입니까? 해시를 사용한 다음 이진 코드를 인코딩하려면 base64 또는 16 진수를 사용하십시오. –
파일을 읽는 방법은 현재 파일을 읽는 것과 같습니다. 당신이 미쳐 가고 싶다면 원시 파일 스트림에 접근 할 수 있지만 SO에서 설명하는 데 더 많은 노력이 필요합니다. –
나는 cleartext pwds를 상속 받았다. 나는 암호화된 텍스트가 설정 파일에 직접 입력되기 전에 디스크 또는 메모리에 일반 텍스트가 없도록하기 위해 그 위치에서 암호화하는 유틸리티를 작성했습니다. 응용 프로그램은 동일한 암호화를 사용하여 암호화를 사용하기 바로 전에 암호화를 해제합니다. – MiddleAgedMutantNinjaProgrammer