Java:なぜMessageDigest.getInstance("MD5")
戻るのか考えてみnull
ませんか?これは最近まで問題なく機能していました。
1681 次
1 に答える
3
私はその質問に疑問を持っています
MessageDigest.getInstance(“ MD5”)がnullを返す
MessageDigest
意図したクラスがである場合、パラメータとして存在しないアルゴリズムを指定した場合でもjava.security.MessageDigest
、そのメソッドはnullを返しません。
jdk1.7からのコード
public static MessageDigest getInstance(String algorithm)
throws NoSuchAlgorithmException {
try {
Object[] objs = Security.getImpl(algorithm, "MessageDigest",
(String)null);
if (objs[0] instanceof MessageDigest) {
MessageDigest md = (MessageDigest)objs[0];
md.provider = (Provider)objs[1];
return md;
} else {
MessageDigest delegate =
new Delegate((MessageDigestSpi)objs[0], algorithm);
delegate.provider = (Provider)objs[1];
return delegate;
}
} catch(NoSuchProviderException e) {
throw new NoSuchAlgorithmException(algorithm + " not found");
}
}
nullが返された場合、mdまたはdelegateはnullである必要があり、このクラスでNPEが発生しました。
したがって、コードを段階的にチェックしてデバッグし、どのオブジェクトがnullであるかを見つけます。
于 2013-01-22T22:04:56.630 に答える