ホームページ >Java >&#&チュートリアル >Java の AES 暗号化メソッドで例外を処理するにはどうすればよいですか?

Java の AES 暗号化メソッドで例外を処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 06:25:25512ブラウズ

How to Handle Exceptions in Java's AES Encryption Method?

Java コードでの例外処理

次の Java コード スニペットを考えてみましょう。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
import java.io.*;


public class EncryptURL extends JApplet implements ActionListener {

    // ...

    public void encrypt(String toEncrypt) throws Exception {
        try {
            String plaintext = toEncrypt;
            String key = "01234567890abcde";
            String iv = "fedcba9876543210";

            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(toEncrypt.getBytes());

            return encrypted;
        }
        catch(Exception e) {
            return null; // Always must return something
        }
    }


    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand() == "Submit") {

            // ...

            String concatURL =
                "user=" + subUserName + "&f=" + subFName +
                "&l=" + subLName + "&em=" + subEmail +
                "&p=" + subPhone + "&h=" + subHeartbeatID +
                "&re=" + subRegionCode + "&ret=" + subRetRegionCode;

            // ...

            try {
                byte[] encrypted = encrypt(concatURL);
                String encryptedString = bytesToHex(encrypted);
                // ...
            } catch (Exception exc) {
                // TODO: handle exception
            }
        }
    }

    // ...

}

次の質問と回答このコードのコンパイル中に直面した問題に対処するsnippet.

質問 1: コード スニペットをコンパイルしようとすると、なぜ「例外をキャッチするか、スローするように宣言する必要があります」という例外がスローされるのですか?

回答:

この例外は、暗号化メソッドが例外をスローするように宣言されているにもかかわらず、それを処理しないために発生します。 try-catch ブロック内。これを解決するために、例外を処理するための catch ブロックが暗号化メソッドに追加されました。

質問 2: コード スニペットが 109 行目で「return ステートメントがありません」例外をスローするのはなぜですか?

答え:

暗号化メソッドにはbyte[] の戻り値の型が宣言されています。これは、あらゆる場合にその型の値を返さなければならないことを意味します。元のコードには catch ブロックに return ステートメントがなかったため、例外が発生しました。例外の場合に null を返す return ステートメントが catch ブロックに追加されました。

学んだ教訓:

  1. 戻り値の型を持つメソッドは必要があります。考えられるすべてのシナリオで常にその型のオブジェクトを返します。
  2. すべてのチェックされた例外は常に次のとおりである必要があります。処理されます。

以上がJava の AES 暗号化メソッドで例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。