UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Java】Javaでハッシュ値を生成する

Javaである検索条件に対する結果オブジェクトをjsonにしてGCSに格納する

このときファイル名を検索条件をハッシュ化したものにしたい

Javaでのハッシュ値の生成の方法を調べた

Javaハッシュ値を生成

Javaハッシュ値を生成するには、Javaの標準機能であるMessageDigestクラスを使う

MessageDigest (Java SE 11 & JDK 11 )

MessageDigest md = MessageDigest.getInstance("SHA-256");

上のコード例のようにgetInstanceメソッドの引数にハッシュ関数を指定する

用語

MessageDigestというのがピンとこなかったので用語について調べた

ハッシュ関数はメッセージダイジェスト関数、メッセージ要約関数、あるいは暗号的ハッシュ関数などと呼ばれるみたい

そして、関数の入力となるメッセージは、プレ・イメージ(pre-image)と呼ばれ、出力となるハッシュ値はメッセージダイジェストやフィンガープリントとも呼ばれるもよう

ハッシュ関数

ハッシュ関数にはMD5SHA-1SHA-512などが、どれがよいのだろうか

ハッシュ関数は、あるメッセージのハッシュ値が与えられた時、そのハッシュ値を持つ別のメッセージを見つけ出すことを困難にすること(弱衝突耐性)と、 ハッシュ値が一致するような異なる2つのメッセージを見つけ出すことを困難にすること(強衝突耐性)が必要である

しかし、ブルート・フォース・アタックや誕生日攻撃などにより、これらの耐性が破られているハッシュ関数がいくつかある

例えば、MD5SHA-1などは既に破られているので、これらのハッシュ関数をセキュリティ関連で使うのはやめるべきということがわかった

ただ、今回はGCP内部のサービス間でGCSにあるファイルのやりとりをするだけなのでセキュリティ観点は不要そう

参考

他参考

https://medium-company.com/java-%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4/