Help us understand the problem. What is going on with this article?

Javaでファイルのハッシュ値を返却するサンプルプログラム

javaでファイルのハッシュ値を返却するサンプルプログラムです。

SampleMain.java
package test;

public class SampleMain {

    public static void main(String[] args) {
        System.out.println(SampleHash
                .getfileHash("glassfish-5.0.1.zip", SampleHash.SHA_512));
    }
}
SampleHash.java
package test;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SampleHash {

    /** MD2アルゴリズム */
    public static final String MD2 = "MD2";
    /** MD5アルゴリズム */
    public static final String MD5 = "MD5";
    /** SHA-1アルゴリズム */
    public static final String SHA_1 = "SHA-1";
    /** SHA-256アルゴリズム */
    public static final String SHA_256 = "SHA-256";
    /** SHA-512アルゴリズム */
    public static final String SHA_512 = "SHA-512";

    /**
     * ファイルのハッシュ値(文字列)を返す
     * @param filePath ファイルパス
     * @param algorithmName アルゴリズム
     * @return ハッシュ値(文字列)
     */
    public static String getfileHash(String filePath, String algorithmName) {

        Path path = Paths.get(filePath);

        byte[] hash = null;

        // アルゴリズム取得
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance(algorithmName);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        try (
                // 入力ストリームの生成
                DigestInputStream dis = new DigestInputStream(
                        new BufferedInputStream(Files.newInputStream(path)), md)) {

            // ファイルの読み込み
            while (dis.read() != -1) {
            }

            // ハッシュ値の計算
            hash = md.digest();

        } catch (IOException e) {
            e.printStackTrace();
        }

        // ハッシュ値(byte)を文字列に変換し返却
        StringBuilder sb = new StringBuilder();
        for (byte b : hash) {
            String hex = String.format("%02x", b);
            sb.append(hex);
        }
        return sb.toString();
    }
}

java.security.DigestInputStreamjava.security.MessageDigestを使用してハッシュ値を取得しています。
取得したハッシュ値(byte)を文字列に変換して返却しています。


以上

yasushi-jp
横浜市在住のITエンジニアです。主に関東圏で活動しています。新しいテクノロジーに興味を持っています。専門はITアーキテクト(Java(主にJavaEE)、データベース、ネットワーク等)がメインですが、新しいテクノロジーに大変興味があり、最近は機械学習や深層学習をPythonで実装したりもしています。 よろしくお願い致します。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away