Javaである検索条件に対する結果オブジェクトをjsonにしてGCSに格納する
このときファイル名を検索条件をハッシュ化したものにしたい
Javaでハッシュ値を生成
Javaでハッシュ値を生成するには、Javaの標準機能であるMessageDigestクラスを使う
MessageDigest (Java SE 11 & JDK 11 )
MessageDigest md = MessageDigest.getInstance("SHA-256");
上のコード例のようにgetInstance
メソッドの引数にハッシュ関数を指定する
用語
MessageDigest
というのがピンとこなかったので用語について調べた
ハッシュ関数はメッセージダイジェスト関数、メッセージ要約関数、あるいは暗号的ハッシュ関数などと呼ばれるみたい
そして、関数の入力となるメッセージは、プレ・イメージ(pre-image)と呼ばれ、出力となるハッシュ値はメッセージダイジェストやフィンガープリントとも呼ばれるもよう
ハッシュ関数
ハッシュ関数にはMD5
やSHA-1
〜SHA-512
などが、どれがよいのだろうか
ハッシュ関数は、あるメッセージのハッシュ値が与えられた時、そのハッシュ値を持つ別のメッセージを見つけ出すことを困難にすること(弱衝突耐性)と、 ハッシュ値が一致するような異なる2つのメッセージを見つけ出すことを困難にすること(強衝突耐性)が必要である
しかし、ブルート・フォース・アタックや誕生日攻撃などにより、これらの耐性が破られているハッシュ関数がいくつかある
例えば、MD5
やSHA-1
などは既に破られているので、これらのハッシュ関数をセキュリティ関連で使うのはやめるべきということがわかった
ただ、今回はGCP内部のサービス間でGCSにあるファイルのやりとりをするだけなのでセキュリティ観点は不要そう
参考
他参考
https://medium-company.com/java-%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4/