1

我正在尝试使用 Jacksum API生成 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,现在它实际上得到了错误。

4

2 回答 2

3

你实际上并没有“得到”一个例外。编译器告诉您您未能正确处理已检查的异常。

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调用的位置);你基本上必须在某个时候处理它。

于 2013-12-04T17:29:45.270 回答
1

你没有得到NoSuchAlgorithmException. 相反,编译器说抛出了一个需要处理的已getChecksumInstance()检查异常,因为您还没有这样做。NoSuchAlgorithmException

你可以通过在你的 throws 子句中做到这一点genHash()(你需要在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
}
于 2013-12-04T17:26:53.160 回答