0

報告されていない例外java.lang.exception:キャッチするか、スローするように宣言する必要があります。なぜこの問題が発生するのですか?この問題を解決するのに役立つ簡単な方法はありますか?

このコードをJavaに適用します。

public byte[] encrypt(String message) throws Exception {
    MessageDigest md = MessageDigest.getInstance("md5");
    byte[] digestOfPassword = md.digest("ABCDEABCDE"
                    .getBytes("utf-8"));
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
    for (int j = 0, k = 16; j < 8;) {
            keyBytes[k++] = keyBytes[j++];
    }

    SecretKey key = new SecretKeySpec(keyBytes, "DESede");
    IvParameterSpec iv = new IvParameterSpec(new byte[8]);
    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);

    byte[] plainTextBytes = message.getBytes("utf-8");
    byte[] cipherText = cipher.doFinal(plainTextBytes);
    // String encodedCipherText = new sun.misc.BASE64Encoder()
    // .encode(cipherText);

    return cipherText;
}

public String decrypt(byte[] message) throws Exception {
    MessageDigest md = MessageDigest.getInstance("md5");
    byte[] digestOfPassword = md.digest("ABCDEABCDE"
                    .getBytes("utf-8"));
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
    for (int j = 0, k = 16; j < 8;) {
            keyBytes[k++] = keyBytes[j++];
    }

    SecretKey key = new SecretKeySpec(keyBytes, "DESede");
    IvParameterSpec iv = new IvParameterSpec(new byte[8]);
    Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    decipher.init(Cipher.DECRYPT_MODE, key, iv);

    byte[] plainText = decipher.doFinal(message);

    return new String(plainText, "UTF-8");
}

エラーはこの以下の部分に示されています

byte[] pass = encrypt(password);
String pw = new String(pass);

何か案が?プロジェクトを実行するためにJavaNetBeansを使用しています。

4

2 に答える 2

4

メソッドencrypt()はをスローしExceptionます。つまり、このメソッドを呼び出す場合は、明示的にこれをスローするか、ブロックExceptionを使用して処理する必要があります。try-catch

あなたの場合、この特定のコードについて:

byte[] pass = encrypt(password);
String pw = new String(pass);

次のいずれかに囲む必要があります。

try{
 byte[] pass = encrypt(password);
 String pw = new String(pass);
}catch(Exception exe){
 //Your error handling code
}

または、このコードがで囲まれているメソッドを宣言しthrows Exceptionます。

于 2012-07-26T16:59:32.493 に答える
0

1.例外を処理する方法は2つあります。

 - Either `declare` it
 - or `Handle` it.

2. encrypt()上記のメソッドは例外をスローします

したがって、呼び出し元のメソッド宣言で宣言します。

例えば:

public void MyCallingMethod() throws Exception{

     byte[] pass = encrypt(password);
     String pw = new String(pass);


}

または try/catch ブロックで処理します、 finally オプションです

try{

     byte[] pass = encrypt(password);
     String pw = new String(pass);
   }catch(Exception ex){


  }
于 2012-07-26T17:16:55.153 に答える