2014-07-22 2 views
1

sftp를 통해 파일을 전송할 때 Commons VFS를 사용하고 있습니다. 복사가 완료되면 원본 및 대상 파일의 체크섬을 비교하려고합니다.Java의 원격 파일 체크섬을 계산하십시오.

Java에서 원격 파일의 체크섬을 어떻게 찾을 수 있습니까? 로컬 파일의 경우 FileUtils.checksum()을 사용하고 있습니다.

+3

내가 (네이티브 또는 VFS를 통해) 어떤 SFTP 명령을 잘 모르는 것 같아요 당신에게 원격 파일의 체크섬을 제공합니다

여기에 반 구운 exanple입니다. 그러나 http://stackoverflow.com/questions/16216902/getting-md5-checksum-on-the-remote-server-using-jsch는 SFTP가 무결성 검사를 즉시 수행한다는 것을 암시하는 것으로 보이므로 무의미 할 수 있습니다. .. 여전히 중요한 경우 SFTP를 사용 중이므로 원격 호스트에 대한 SSH 액세스 권한이있을 수 있습니다. SSH 세션이 주어지면 원격 서버에 체크섬 (아마도 openssl을 통해)을 계산하도록 요청할 수 있습니다. – GPI

답변

1

사용중인 체크섬 구현 (예 : CRC32 등)에 따라 다릅니다.

예를 들어 CRC32를 살펴 보겠습니다. CRC32의 인스턴스를 만들고 더 많은 바이트로 업데이트합니다. 이것은 입력 스트림에서 더 많은 바이트를 사용할 수있을 때마다 업데이트 할 수 있기 때문에 수행하려는 작업에 가장 적합합니다.

public long checksumRemote(InputStream inputStream) { 
    CRC32 checksum = new CRC32(); 
    boolean finished = false; 
    byte[] buffer = new byte[4096]; 

    while (!finished) { 
     int bytesRead = inputStream.read(buffer); 
     if (bytesRead < 0) { 
      finished = true; 
     } else if (bytesRead > 0) { 
      checksum.update(buffer, 0, bytesRead); 
     } 
    } 

    return checksum.getValue(); 
} 
+0

네, 그렇지만 SFTP 스트림에서 나온 바이트를 계산하고 있습니다. 따라서 원격 파일이 아닌 로컬 파일의 체크섬을 계산하게됩니다. (SFTP가 즉시 체크섬을하기 때문에, 그리고 스트림을 체크섬하므로, 즉시 계산 된 체크섬을 최종 파일의 체크섬과 비교하는 것이 충분하다고 생각할 수도 있지만, OP는 직접적인 비교를 염두에두고 있습니다. 마지막 체크섬과 함께 원격 체크섬) – GPI

+0

누군가가 원격 파일과 체크섬을 다운로드하고 제안 비교할 것을 제안했습니다. 이것은 성능 저하 일 것입니다. – user608020