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。

所以一步一步检查和调试你的代码,找出哪个对象是空的。

于 2013-01-22T22:04:56.630 回答