2013-03-15 1 views
2

파일에 지문을 써야합니다. 2013 년에 Java로 추천되는 것은 무엇입니까? 또한 파일 크기를 비교해야합니까, 아니면 불필요한 검사입니까? 답변이 많이, 감사 :파일을 비교하는 Java 및 해시 알고리즘

위양성의 확률은 0

편집에 매우 근접해야한다. 현재 백업 소프트웨어의 표준은 무엇입니까? SHA-256? 더 높은? 나는 md5가 적합하지 않다고 생각하니?

+0

보통 128 비트 또는 256 비트 해시가 정상적으로 사용하기에 좋습니다. 파일 크기를 비교하여 파일을 다른 버킷에 넣은 다음 동일한 크기의 파일이 두 개 이상인 경우 해시 만 수행 할 수도 있습니다. – nhahtdh

+0

타사 라이브러리가 허용됩니까? Guava는 최소한 순수 Java에서해야 할 일보다 훨씬 쉽게이 기능을 제공합니다. –

+0

MD5가 완벽하게 적합합니다. MD5는 더 이상 ** 보안 ** 해시 알고리즘으로 간주 될 수 없습니다. 중요하다면 상황을 판단해야합니다. (해커가 소프트웨어를 속여 두 파일이 같은 것으로 생각할 가능성이 있습니까?). – Jesper

답변

9

위양성 확률이 0이 아닌 일 경우 "번개가 칠 확률보다 낮습니다"와 반대로 해시 알고리즘을 전혀 사용할 수 없습니다. 바이트 단위로 파일을 비교해야합니다.

는 타사 라이브러리를 사용할 수 있다면, 당신은 두 개의 파일을 비교하는 Guava를 사용할 수있는, 가치가 무엇인지에 대한

바이트 단위 원 라이너

Files.asByteSource(file1).contentEquals(Files.asByteSource(file2)); 

와 개폐을 담당 파일뿐만 아니라 비교의 세부 사항. 당신이 번개에 의해 쳐지고보다 가능성이 잘못된 반응을 받아 들일 경우

, 당신은 할 수

HashCode를 반환 한 다음 해시와 동일한 지 어떤지가 테스트 할 수 있습니다
Files.hash(file, Hashing.sha1()); // or md5(), or sha256(), or... 

다른 파일의. (그 버전은 MessageDigest의 성가신을 다루고, 파일을 적절하게 열고 닫는 것 등을 다룹니다.)

+0

MD5는 괜찮습니다. 또는 대부분 64 비트 해시로도 충분합니다. 실용적인 (안전하지 않은) 사용 수준에서는 충돌 가능성이 매우 낮습니다. http://en.wikipedia.org/wiki/Birthday_paradox#Probability_table – nhahtdh

+0

"toByteArray"메서드를 지금 사용하고 싶습니다. – Setheron

+0

@Setheron : 이유 그 말하니?이 연산들 중에'toByteArray'가 필요하지 않습니다. (또한 파일이 RAM에 들어가기에는 너무 크더라도 작동해야합니다.) –

1

Java에서 파일의 md5 체크섬을받는 방법을 묻는 중입니까? 그렇다면 허용 된 대답 herehere을 읽으십시오. 기본적으로,이 작업을 수행 :

import java.security.DigestInputStream; 
... 
... 

MessageDigest md_1 = MessageDigest.getInstance("MD5"); 
MessageDigest md_2 = MessageDigest.getInstance("MD5"); 
InputStream is_1 = new FileInputStream("file1.txt"); 
InputStream is_2 = new FileInputStream("file2.txt"); 
try { 
    is_1 = new DigestInputStream(is_1, md_1); 
    is_2 = new DigestInputStream(is_2, md_2); 
} 
finally { 
    is_1.close(); 
    is_2.close(); 
} 
byte[] digest_1 = md_1.digest(); 
byte[] digest_2 = md_2.digest(); 

// compare digest_1 and digest_2 

는 또한 파일 크기를 비교할 경우, 또는이는 불필요한 검사입니까?

필요하지 않습니다.

+0

은 안전한 것으로 간주되는 파일을 비교하기 위해 md5입니까? – Stig

+0

SHA는 MD5보다 안전합니다. 그러나 동일한 MD5 체크섬을 공유하는 두 개의 다른 파일 확률은 거의 제로입니다. – Barney

+0

다시 말하지만, 파일 크기를 비교하는 것은 불필요합니다.하지만 해시를 계산하기 위해 값 비싼 디스크 읽기를 건너 뛸 수 있기 때문에 더 나은 방법이라고 생각합니다. – nhahtdh