본문 바로가기

bouncy castle

[bouncy castle] File Hash(SHA256) 값 구하기

File Hash Example

 

릴리즈한 결과물의 변경이 었는지 확인 할수 있게 Hash 값을 같이 제공한다.

 

public byte[] sha256(File file) {
    Digest digest = new SHA256Digest();

    int hashSize = digest.getDigestSize();
    byte[] outBuff = new byte[hashSize];


    byte[] buf = new byte[4*1024]; // 4KB
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        int len;
        while ((len = fis.read(buf)) > 0) {
            digest.update(buf, 0, len);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (fis != null) {
            try { fis.close(); } catch (Exception ign) {}
        }
    }

    digest.doFinal(outBuff, 0);
    return outBuff;
}

 

 

릴리즈된 nodejs 파일의 SHA256 값을  제공한다.

// https://nodejs.org/dist/v18.17.0/SHASUMS256.txt

b61952f8468fe50b24b46039ad795af4bbea3751ded7cb488ec52e5a332f91ce  node-v18.17.0-aix-ppc64.tar.gz
19731ef427e77ad9c5f476eb62bfb02a7f179d3012feed0bbded62e45f23e679  node-v18.17.0-darwin-arm64.tar.gz
621cf884c4c27ddc595ff23f35ccd6fa1e827470581c30d31d779ba3cd6a162e  node-v18.17.0-darwin-arm64.tar.xz
2f381442381f7fbde2ca644c3275bec9c9c2a8d361f467b40e39428acdd6ccff  node-v18.17.0-darwin-x64.tar.gz
774734231d484d72e14f3327db6d7915abd3e2164ba577dd78affa5eade48a11  node-v18.17.0-darwin-x64.tar.xz
7c47c07521f8be7693f3b0436d2ef0cb5a490d070d1d9a3606decc55c39c41c4  node-v18.17.0-headers.tar.gz
1a7a3bbb7299f69e16a8ee2b327dd1c4811a9376bcafe41f8310467a9a9e3307  node-v18.17.0-headers.tar.xz

 

사이즈가 작은 node-v18.17.0-headers.tar.xz 파일의 sha256 값이 맞는지 확인해 보자.

 

@Test
public void hash_sha256_test_002() {
    File file = Util.getResourceFile("hash/node-v18.17.0-headers.tar.xz");

    Hash hash = new Hash();
    byte[] output = hash.sha256(file);
    assertEquals("1A7A3BBB7299F69E16A8EE2B327DD1C4811A9376BCAFE41F8310467A9A9E3307", toHex(output));
}

 

https://github.com/coolbong/BouncyCastleExample/blob/master/src/main/java/io/github/coolbong/Hash.java

 

'bouncy castle' 카테고리의 다른 글

[bouncy castle] SEED CBC Example  (0) 2023.08.07
[bouncy castle] SEED ECB Example  (0) 2023.08.05
[bouncy castle] HMAC-MD5, HMAC-SHA1 example  (0) 2023.08.05
[bouncy castle] AES CMAC 128 example  (0) 2023.08.04
[bouncy castle] Random generator  (0) 2023.08.01