我的SHA1代码语法错误

我得到以下代码:

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 >> 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 

好吧,如果MessageDigest.getInstance()抛出NoSuchAlgorithmException 就会发生 – 因为你打印出exception然后继续执行。

然而,它实际上是因为这个:

 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(); 

您的HEX_CHARS变量永远不会设置为除null之外的任何内容。

尝试在HEX_CHARS中添加除null之外的其他内容。