Java:MessageDigest.getInstance(“MD5”)返回null

时间:2013-01-22 21:51:10

标签: java jce

Java:知道为什么MessageDigest.getInstance("MD5")会返回null?直到最近才开始工作。

1 个答案:

答案 0 :(得分:2)

我怀疑这个问题

  

MessageDigest.getInstance(“MD5”)返回null

如果您所指的课程MessageDigestjava.security.MessageDigest,那么该方法 NOT 将返回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。

因此,请逐步检查并调试代码,找出哪个对象为空。