CryptoJS를 통한 SHA256의 해시값과 Java Message Digest를 이용한 SHA256 해시값을 어떻게 같게 만들까요?

조회수 3076회
var result = "";
var reader = new FileReader();
reader.onload = function(event) {
    result = CryptoJS.SHA256(event.target.result).toString();
};
reader.readAsBinaryString(tempFile);

자바 스크립트에서의 파일 해시값은 98a0996953e89a6d388057ae9168f004c9d1fb4ec3d863d1ab35fefe554bb214

public String sha256(String filepath) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        FileInputStream fis = new FileInputStream(filepath);

        byte[] dataBytes = new byte[1024];

        int nread = 0;
        while ((nread = fis.read(dataBytes)) != -1) {
            md.update(dataBytes, 0, nread);
        }

        byte[] mdbytes = md.digest();

        /*String shaHex = DatatypeConverter.printHexBinary(mdbytes);*/
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < mdbytes.length; i++) {
            sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
        }
        fis.close();
        return sb.toString();
    }

/* 실행하는 메소드에서 */
SHA256 hash = new SHA256();
System.out.println("java hash : "+hash.sha256(filePath+filename));

java에서의 해시값은 f60dc63c2653b4f35dbf14ac5ad4e9a99e87f5af193b6b599e361c493d5d23a9

이렇게 나옵니다. 두 개가 다른데 어떻게 해야 같은 값을 얻을 수 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

    • java
    jshell> import java.sequ
    jshell> import java.seq
    jshell> import java.security.*
    
    jshell> public String sha256(String filepath) throws Exception {
       ...>         MessageDigest md = MessageDigest.getInstance("SHA-256");
       ...>         FileInputStream fis = new FileInputStream(filepath);
       ...>
       ...>         byte[] dataBytes = new byte[1024];
       ...>
       ...>         int nread = 0;
       ...>         while ((nread = fis.read(dataBytes)) != -1) {
       ...>             md.update(dataBytes, 0, nread);
       ...>         }
       ...>
       ...>         byte[] mdbytes = md.digest();
       ...>
       ...>         /*String shaHex = DatatypeConverter.printHexBinary(mdbytes);*/
       ...>         StringBuffer sb = new StringBuffer();
       ...>         for (int i = 0; i < mdbytes.length; i++) {
       ...>             sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
       ...>         }
       ...>         fis.close();
       ...>         return sb.toString();
       ...>     }
    |  created method sha256(String)
    
    jshell> sha256("/usr/bin/gcc")
    $4 ==> "5aa1a5dbef17daf4563c88b4e891fecaa17f4557ff0f4cc824531c3a1d8a43ea"
    

    *python

    In [3]: import sys
    
    In [4]: import hashlib
    
    In [5]: BUF_SIZE = 65536
    
    In [6]: sha2 = hashlib.sha256()
    
    In [7]: with open('/usr/bin/gcc', 'rb') as f:
       ...:     while True:
       ...:         data = f.read(BUF_SIZE)
       ...:         if not data:break
       ...:         sha2.update(data)
    
    In [9]: print("SHA2: {0}".format(sha2.hexdigest()))
    SHA2: 5aa1a5dbef17daf4563c88b4e891fecaa17f4557ff0f4cc824531c3a1d8a43ea
    

    질문자가 작성한 자바 코드는 문제가 없습니다.

    jscrytojs 라이브러리의 사용법 확인과 해당 라이브러리의 버그 트래커를 살펴보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)