Java:知道为什么MessageDigest.getInstance("MD5")
会返回null
?直到最近才开始工作。
答案 0 :(得分:2)
我怀疑这个问题
MessageDigest.getInstance(“MD5”)返回null
如果您所指的课程MessageDigest
是java.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。
因此,请逐步检查并调试代码,找出哪个对象为空。