2010-02-01 5 views
4

나는 C# 프로그램과 하나의 파일에서 정보를 읽고 쓸 수 있습니다. 그 사용자가 그 파일의 내용을 변경할 수 없도록해야합니다. 나는 그 파일이 올바른지 (사용자가 변경하지 않음) 첵을 할 수있는 방법이 필요합니다. 어떤 아이디어라도 써 주시면 함께 토론하겠습니다. 많은 감사합니다C#, 검사가 정확한 파일입니다.

+0

파일 및 사본과 다른 점은 무엇입니까? 체크섬 또는 crc 또는 해시 ?? 또는 다른? –

답변

2

당신이 원하는 무엇을 달성 할 완전히 신뢰할 수있는 방법은 없습니다. 파일을 해시하면 사용자가 파일을 수정하고 해시를 다시 생성 할 수 있습니다. 그러면 프로그램은 파일이 수정되지 않았다고 생각합니다. 레지스트리에서 해시를 숨기려고하면 사용자가 SysInternals 도구를 사용하여 저장 위치를 ​​쉽게 찾을 수 있습니다.

대신 파일을 디지털 서명 할 수 있습니다.이 파일은 해시와 유사하지만 비밀 키가 포함됩니다. 그러나 다시 말해서 키를 비밀로 유지해야하며 응용 프로그램 또는 컴퓨터의 어딘가에 저장하면 사용자가 키를 찾을 가능성이 있으므로 다시 파일을 수정하고 사직 할 수 있습니다. 프로그램에 의해 수정이 감지되지 않습니다.

작성한 웹 서비스에 파일을 제출하거나 효율성을 높이기 위해 파일의 해시를 제출할 수도 있습니다. 웹 서비스는 파일이나 해시에 디지털 서명을하고 서명을 반환하거나 서버에 저장할 수 있습니다.나중에 응용 프로그램이 파일을 읽을 때 파일이 변경되지 않았는지 확인하기 위해 서명과 서버의 공개 키 (서버에서 파일을 가져 와서 서버에 서명해야합니다)를 사용할 수 있습니다. 또는 서버가 서명을 저장 한 경우 파일 또는 해시를 서버에 다시 제출할 수 있으며 파일을 확인하고 결과를 응용 프로그램에 반환 할 수 있습니다. 다시 말하지만, 이것은 완전한 것이 아닙니다. 사용자가 웹 서비스를 스푸핑 할 수있는 방법이 있습니다. SSL을 사용하는 경우에도이를 피할 수있는 방법이 있습니다. 사용자가 애플리케이션을 완전히 해킹하고 인증 코드를 제거 할 수 있습니다.

다른 질문에서 볼 때, 이것은 소프트웨어 정품 인증 시스템의 일부 구성 요소입니다. Adobe와 Microsoft 및 그러한 시스템을 만드는 데 실패한 시도를 살펴보십시오. 당신이 더 잘할 수 있다고 생각한다면, 행운을 빈다. 충성도가 높은 사용자를 실망시키는 활성화 시스템없이 법적으로 소프트웨어를 사용하는 좋은 방법이 있습니다.

+0

네가 맞다고 판단 했어, 내 프로그램 데모를 만들고 싶어. 답변 해 주셔서 감사합니다. 더 나은 방법을 말씀해주십시오. 충성도가 높은 사용자를 최대한 실망시키고 싶습니다. –

+0

사용자 복사 파일은 파일과 함께 작동하고 복사 된 파일을 대체하며 0에서 작동합니다. 나는 이것을 원하지 않는다. 파일 쓰기 시간 정보 ... –

+0

파일 및 사본과 다른 점은 무엇입니까? 체크섬 또는 crc 또는 해시 ?? 또는 다른? –

0

MD5 해시 알고리즘을 확인하십시오.

0

사용자는 파일 시스템에서 사용자를 제한 할 수 없지만 응용 프로그램은 파일 매개 변수 (& 수정 된 시간 소인, 크기)를 저장하고 그 내용에 해시를 작성하여 다음 파일 사용 전에이 값과 비교할 수 있습니다.

업데이트.

사용자가 파일을 수정하지 않도록하려면 읽기 이외의 액세스를 사용자가 제한해야합니다. 따라서 두 가지 대안이 있습니다 :

  1. 보안 권한을 사용하고 ACL에서 사용자를 제거하십시오. 사용자가 admin이면 나쁜 생각입니다. 다른 경우 가능한 경우 사용자 그룹을 정의하는 것이 좋습니다.
  2. 데이터베이스를 사용하십시오. 이것은 고급 사용자 만 수정할 수있는 간단한 로컬 DB 일 수 있습니다. SQLite. 그러나 이것은 (
+0

좋아요, 아주 잘, 저를 100 % 이해합니다. 그러나 해시 결과를 저장할 위치는 어디입니까? 나는 레지스트리에 저장하려고 시도합니다. 그러나 사용자는 레지스트리에서 해당 해시 결과를 복사 할 수 있으며, 그 파일은 잠시 작업 한 다음 레지스트리에 파일과 해시를 붙여 넣고 0에서 작동합니다. 나는 이것을 원하지 않는다 ... –

+0

내 대답 읽기. 그것은 당신을 위해 작동하지 않습니까? – psychotik

+0

@Armen psychotik의 대답은이 작업을 다루고 있습니다. – terR0Q

5

계산 파일 checksum 또는 crc 또는 hash 및 파일 자체에 그것을 밖으로 쓰기 (... 적절한 도구를 설치할 수 없음) 사용자가이 파일을 열 수있는 가정에서만 계산을 작동 해시를 작성하기 전에 해시). 그런 다음 파일을로드 할 때이 해시가 있는지 확인하고 제거한 다음 해시를 다시 계산하십시오. 일치하는지 확인하십시오. 그렇지 않다면, 그것은 조작 된 것입니다. 내용을 직접 변경할 때마다 체크섬/해시를 업데이트하십시오. 당신은 단순히 C#에서 읽기 전용 파일을 열해야하는 경우

+1

수정 사항이 감지되지 않도록 사용자가 파일을 수정하고 파일의 해시를 바꿀 수 있습니다. – AaronLS

+0

Thaks, 그러나 사용자 복사 파일을 참조하십시오. 때로는 파일과 함께 작동 한 다음 복사 된 파일을 대체하고 0에서 작동합니다. 나는 이것을 원하지 않는다. 파일 쓰기 시간 정보 ... –

+0

파일 및 사본과 다른 점은 무엇입니까? 체크섬 또는 crc 또는 해시 ?? 또는 다른? –

0

, 당신은 FileAccess.Read 플래그를 specfiying하여이를 수행 할 수 있습니다

using (FileStream fs1 = new FileStream(path, FileMode.Open, FileAccess.Read)) 
{ 
    using (StreamReader rd1 = new StreamReader(fs1)) 
    { 
     while ((str = rd1.ReadLine()) != null) 
     { 
      //do stuff 
     } 
    } 
} 
0

당신은 파일이 변경되지 않았 음을 확인하기 위해 해시를 사용할 수 있을까?

public static void Main(string[] args) 
{ 
    using (HashAlgorithm hashAlg = new SHA1Managed()) 
    { 
     using (Stream file = new FileStream("C:\\test.txt", FileMode.Open, FileAccess.Read)) 
     { 
      byte[] hash = hashAlg.ComputeHash(file); 
      Console.WriteLine(BitConverter.ToString(hash)); 
     } 
    } 
} 

또는

BitConverter.ToString(MD5.Create().ComputeHash(File.ReadAllBytes("C:\\test.txt"))) 
관련 문제