我正在尝试使用Jacksum API来generate a Whirlpool hash,但是我遇到了NoSuchAlgorithmException:
import java.security.NoSuchAlgorithmException;
import jonelo.jacksum.JacksumAPI;
import jonelo.jacksum.algorithm.AbstractChecksum;
public static String genHash(String inText) {
AbstractChecksum checksum = null;
checksum = JacksumAPI.getChecksumInstance("whirlpool");
checksum.update(inText.getBytes());
return checksum.getFormattedValue();
}
我尝试了其他流行的算法(sha256,md5),它们显然都“不是这样”。
./libsdpg.java:27: error: unreported exception NoSuchAlgorithmException; must be caught or declared to be thrown
checksum = JacksumAPI.getChecksumInstance("whirlpool");
^
1 error
编辑:我添加了try-catch,现在它实际上正在得到错误。
最佳答案
您实际上并不是在“获取”异常。编译器告诉您您未能正确处理检查的异常。JacksumAPI#getChecksumInstance(java.lang.String)
方法引发一个称为NoSuchAlgorithmException
的检查异常。被检查的异常必须被显式处理(使用try-catch
),或者封装方法必须声明将其包括在其签名中来引发该异常。因此,您的选择是:
try {
...
checksum = JacksumAPI.getChecksumInstance("whirlpool");
...
} catch(NoSuchAlgorithmException e) {
//handle the exception
}
或将您的方法签名更改为:
public static String genHash(String inText) throws NoSuchAlgorithmException {
...
}
请记住,使用第二种方法,您只是将处理推到了更高的层次(即,调用
genHash
的地方);您基本上必须在某个时候处理它。