現在、パスワードを暗号化してデータベースに保存する必要がある Web アプリケーションを作成しています。PBKDF2WithHmacSHA1 を使用してパスワードを暗号化する次のガイドを見つけました。提供された例では、getEncryptedPassword メソッドはバイト配列を返します。
結果を Base64 エンコードする利点はありますか? デメリットはありますか?
現在、パスワードを暗号化してデータベースに保存する必要がある Web アプリケーションを作成しています。PBKDF2WithHmacSHA1 を使用してパスワードを暗号化する次のガイドを見つけました。提供された例では、getEncryptedPassword メソッドはバイト配列を返します。
結果を Base64 エンコードする利点はありますか? デメリットはありますか?
byte[] 配列は、値を格納するための最小のメカニズムです (ストレージ スペースに関して)。これらの値がたくさんある場合は、それらをバイトとして保存するのが理にかなっています。結果を保存する場所によっては、フォーマットも異なる場合があります。ほとんどのデータベースは byte[] 値にかなりうまく対応しますが、扱いにくい場合があります (データベースによって異なります)。テキスト ファイルや XML ドキュメントなどのストアは、明らかに byte[] 配列に苦労します。
ほとんどの場合、意味のある 2 つの形式、16 進数表現、またはバイト [] があると思います。短い値 (32 文字未満) に対する Base64 の利点がそれだけの価値があるとはほとんど思いません (より大きなアイテムの場合は、base64 を使用してください。そのための素晴らしいライブラリもあります)。
これは明らかにすべて主観的です.....
値を 16 進数に変換するのは非常に簡単です。Java でバイト配列を 16 進文字列に変換する方法を参照してください。
16 進出力は便利で、構築するアルゴリズムがより複雑な Base64 よりも管理が簡単で、そのため少し遅くなります.....
妥当なデータベースであると仮定しても、それは単なるエンコーディング スキームであるため、利点はありません。Base 64 エンコーディングの結果、サイズが大きくなりますが、これは欠点です。データベースが確実に 8 ビット バイトを格納する場合は、ハッシュをデータベースに格納するだけです。