Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的SHA1代码语法错误_Java_Sha1 - Fatal编程技术网

Java 我的SHA1代码语法错误

Java 我的SHA1代码语法错误,java,sha1,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"+"peoj

我得到了以下代码:

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);
    }
}
如果
MessageDigest.getInstance()
throw
nosuchagorithmexception
,就会发生这种情况,因为您正在打印异常,但不管怎样都会继续

然而,这实际上是因为:

private static final char[] HEX_CHARS = null;
然后这个:

chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
我怀疑您实际上没有运行前面的代码-至少在我的机器上,NPE正确地指向第24行,该行包括十六进制字符

要修复:

private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
如果
MessageDigest.getInstance()
throw
nosuchagorithmexception
,就会发生这种情况,因为您正在打印异常,但不管怎样都会继续

然而,这实际上是因为:

private static final char[] HEX_CHARS = null;
然后这个:

chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
我怀疑您实际上没有运行前面的代码-至少在我的机器上,NPE正确地指向第24行,该行包括十六进制字符

要修复:

private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();

您的
HEX\u CHARS
变量从未设置为除
null
之外的任何值。您的
HEX\u CHARS
变量从未设置为除
null
之外的任何值。

尝试在HEX\u CHARS中输入null以外的值。

尝试在HEX\u CHARS中输入null以外的值。

不要吞下该值
nosuchagorithmexception
异常。如果它被抛出,你一定会得到一个NPE。最好将它包装在RuntimeException中,让它冒泡起来。您的意思是用整个方法体包装
尝试{}
,然后
捕获(异常e){e.printStackTrace();}
?不要吞下
NoSuchAlgorithmException
异常。如果它被抛出,你一定会得到一个NPE。最好用RuntimeException包装它,让它冒泡起来。你是说用整个方法体包装
尝试{}
,然后
捕获(异常e){e.printStackTrace();}
?好的,谢谢!我只是从上一个示例中获取代码并实现了它。我的eclipse自动修复了带有
私有静态final char[]Hex_Chars=null的十六进制字符我用你的行替换了那行。现在我得到了正确的结果。但我想知道这段代码是否最适合SHA1哈希函数?@Woho87:就我所知,这没关系——尽管你肯定应该对catch块做些什么。您可能应该抛出RuntimeException。您的意思是用整个方法体包装
尝试{}
,然后
捕获(异常e){e.printStackTrace();}
?@Woho87:不,我的意思是去掉
e.printStackTrace()替换为
抛出新的RuntimeException(e)。接受异常并假装它没有发生几乎从来都不是正确的方法。好的,谢谢!我只是从上一个示例中获取代码并实现了它。我的eclipse自动修复了带有
私有静态final char[]Hex_Chars=null的十六进制字符我用你的行替换了那行。现在我得到了正确的结果。但我想知道这段代码是否最适合SHA1哈希函数?@Woho87:就我所知,这没关系——尽管你肯定应该对catch块做些什么。您可能应该抛出RuntimeException。您的意思是用整个方法体包装
尝试{}
,然后
捕获(异常e){e.printStackTrace();}
?@Woho87:不,我的意思是去掉
e.printStackTrace()替换为
抛出新的RuntimeException(e)。接受一个异常并假装它没有发生几乎从来都不是正确的方法。