0

String の MD5 ハッシュを計算する必要があり、グーグルでこれを見つけまし

次のように使用する、文字列のハッシュを担当する再利用可能なユーティリティ クラスが必要ですAeSimpleMD5.MD5(myString);

NoSuchAlgorithmExceptionこの呼び出しは、文字列をUnsupportedEncodingExceptionハッシュするたびに確認する必要があることを意味します。これについていくつか質問があります。例外をスローする可能性のある行をコピーします。

    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(str.getBytes("iso-8859-1"), 0, str.length());

1) 例外がスローされることはありますか? MD5アルゴリズムまたは「iso-8859-1」エンコーディングが欠落している可能性はありますか?

2)これらの例外のいずれかをキャッチした場合、どうすればよいか考えています。答えは: おそらく何もない! したがって、例外を新しいランタイム例外 (おそらく のようなものMD5HashingException) にラップするのは意味がありませんか?

4

4 に答える 4

2

ここでの典型的なパターンは次のとおりです。

try {
   /* do whatever */
} catch (ExceptionIDontBelieveIn eidbi) [
   throw new RuntimeException(eidbi); // or subclass thereof
}

「私の状況では、この例外は起こらないと確信している」という表現です。MD5 または ISO-8859-1 を欠いているエキゾチックなブート クラス パスでコードが実行されないことが確実な場合は、これが解決策です。

于 2012-09-09T16:37:45.467 に答える
1
  1. おそらくそうではなく、MD5将来の実装から削除される可能性は非常に低いと思われます。
  2. あなたの考えは正しいと思います。それについては何もする必要がないので、それを処理してカスタムの RuntimeException をスローするのが最も賢明な方法のようです。ただし、これを複数回行う必要はありません。初期化中にへの参照を取得し、MessageDigest保存して後で再利用するだけです。
于 2012-09-09T16:23:25.923 に答える
0

Because of the original design of

MessageDigest.getInstance();

taking a String as a parameter, there is no compile-time checking done to check if the hashing algorithim exists hence the possibility that NoSuchAlgorithmException could be thrown.

However, as MD5 is a standard algorithim supported by Java this exception should never be thrown.

The same is true for iso-8859-1 character encoding.

于 2012-09-09T16:33:02.567 に答える
0

この場合、例外に対処する必要がない場合は、Google Guava の使用を検討できます (例外は発生しないため)。

byte[] hashedBytes = Hashing.md5().hashString(str, Charsets.ISO_8859_1).asBytes();
于 2012-09-09T16:47:33.493 に答える