프로그래밍(~2017)/자바

[자바] MD5 만드는 함수

단세포소년 2011. 11. 11. 15:38
반응형

파일이 바뀌었는지를 확인하기 위해서 사용하였다.
아마존 클라우드랑 로컬 파일시스템이랑 데이터 자동 동기화 프로그램을 작성중인데 최근 수정 날짜로만 파일이 바뀐지를 알아보기는 아주 비효율적이라 파일의 DNA 즉 MD5 코드를 이용하여 파일이 바뀐지 분석하였다.
클라우드에 파일이 생겼는지 삭제됐는지 수정됐는지 알기 위해서 클라우드상의 파일 목록을 로컬에서 저장해두고 N초 마다 목록을 다시 가져와 과거의 목록과 비교하면서 감시하고 있는데... 클라우드상에서 이런걸 지원해주는거 없나??
시간을 보내주면 그 시간 이후에 파일이 생겼는지, 수정됐는지, 삭제됐는지 아는 방법... 생성, 수정은 최근 수정 날짜로 판단하면 되는데 삭제된 파일은.. 최근 수정 날짜로 판단이 불가하니까.. 에이..

어째든 아래의 코드가 파일이든 모든 inputStream 을 받아 MD5 코드를 만들어 주는 함수이다...

public static byte[] computeMD5Hash(InputStream is) throws NoSuchAlgorithmException, IOException {
         BufferedInputStream bis = new BufferedInputStream(is);
         try {
             MessageDigest messageDigest = MessageDigest.getInstance("MD5");
             byte[] buffer = new byte[16384];
             int bytesRead = -1;
             while ((bytesRead = bis.read(buffer, 0, buffer.length)) != -1) {
                 messageDigest.update(buffer, 0, bytesRead);
             }
             return messageDigest.digest();
         } finally {
             try {
                 bis.close();
             } catch (Exception e) {
                 System.err.println("Unable to close input stream of hash candidate: " + e);
             }
         }
     }


위 함수를 그냥 사용하면 반환형이 byte 배열이라 사용하기 힘듬
아래의 함수를 이용해서 BASE64로 인코딩해서 String 으로 만들어서 사용하세요

   public static String toBase64(byte[] data) {
         byte[] b64 = Base64.encodeBase64(data);
         return new String(b64);
     }



반응형