Jacksum NoSuchAlgorithmException

时间:2013-12-04 17:25:40

标签: java hash whirlpool

我正在尝试将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,现在它实际上是出错了。

2 个答案:

答案 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的地方);你基本上必须在某个时候处理它。