我收到了以下代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Sha1{
private static final char[] HEX_CHARS = null;
public static void main(String[] args){
String hash = toSHA1(("27"+"peojvootv").getBytes());
System.out.println(hash);
}
public static String toSHA1(byte[] convertme) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-1");
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
byte[] buf = md.digest(convertme);
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i) {
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}
}
不知何故发出错误。我不知道如何解决它。这是callstack
Exception in thread "main" java.lang.NullPointerException
at mainClockies.Sha1.toSHA1(Sha1.java:26)//The return statement of second method
at mainClockies.Sha1.main(Sha1.java:12)//The callback of the second method
答案 0 :(得分:4)
好吧,如果MessageDigest.getInstance()
抛出NoSuchAlgorithmException
,就会发生 - 因为你打印出异常但随后继续进行。
然而,实际上是因为这个:
private static final char[] HEX_CHARS = null;
然后这个:
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
我怀疑你实际上并没有运行你面前的代码 - 至少在我的机器上,NPE正确地指向第24行,包括HEX_CHARS。
修复:
private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
答案 1 :(得分:2)
您的HEX_CHARS
变量永远不会设置为null
以外的任何内容。
答案 2 :(得分:0)
尝试在HEX_CHARS中添加除null之外的其他内容。