我正在尝试将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,现在它实际上是出错了。
答案 0 :(得分:1)
你没有得到NoSuchAlgorithmException
。相反,编译器说getChecksumInstance()
抛出一个需要处理的已检查异常NoSuchAlgorithmException
,因为你还没有这样做。
您可以通过在genHash()
中使用throws子句来执行此操作(您需要在调用genHash()
的方法中处理异常)
// Solution 1
public static String genHash(String inText) throws NoSuchAlgorithmException {
或围绕getChecksumInstance()
内的try-catch
来电。
// Solution 2
try {
checksum = JacksumAPI.getChecksumInstance("whirlpool");
} catch(NoSuchAlgorithmException e) {
// Do something on exception
}
答案 1 :(得分:1)
你实际上并没有"得到"一个例外。编译器告诉您未能正确处理已检查的异常。
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
的地方);你基本上必须在某个时候处理它。