備忘録だったものをまとめた
下記実装で事足りることが分かったので、それをまとめる
- 下記:ファイルをMD5するだけの実装
public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
String filename = “./test.bin”;
try (FileInputStream fis = new FileInputStream(filename);){
String asHex = DigestUtils.md5DigestAsHex(fis);
//asHex:236f8a6f68879b4542c0a8218d88e286
//cmd md5sum fileNameと一致
System.out.println(“asHex:” + asHex);
}
}
- 下記ファイルをMD5ハッシュ。その値をbase64でエンコードした値の算出
private static String calculateMD5(String filename) {
try (FileInputStream fis = new FileInputStream(filename);
// System.out.println(“md5: ” + new String(DigestUtils.md5Digest(fis)));
byte[] a = DigestUtils.md5Digest(fis);
// System.out.println(“base64 of md5: ” + a.toString());
String asHex = DigestUtils.md5DigestAsHex(fis);
// System.out.println(asHex);
//base64 of md5: I2+Kb2iHm0VCwKghjYjihg==
//md5sum test.bin | cut -d ‘ ‘ -f1 | xxd -r -p | base64と一致
System.out.println(“base64 of md5: ” + new String(Base64.getEncoder().encode(DigestUtils.md5Digest(fis))));
}
}
検証結果
基本的に1、2行で書けるのでこれからも上記実装を使っていこうと思います。
注意:FileInputStream#readをした後にfisを使ってハッシュ計算を行うと、readですでにfisは読み込まれているので、正しいハッシュ計算はできなくなります。なので、再度try-catchを作ってread用とハッシュ計算用で2つ実装をする必要がある。