我的SHA1代码语法错误

时间:2011-03-01 18:13:03

标签: java 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 < 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

3 个答案:

答案 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之外的其他内容。