1

Java:なぜMessageDigest.getInstance("MD5")戻るのか考えてみnullませんか?これは最近まで問題なく機能していました。

4

1 に答える 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 に答える