You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java加密模块异常:生成AES密钥遇NoSuchAlgorithmException求助

解决Java生成AES密钥时的NoSuchAlgorithmException异常

这个错误的核心原因是:KeyGenerator.getInstance("AES")方法会抛出受检异常(Checked Exception)NoSuchAlgorithmException,Java语法强制要求必须显式处理这类异常——要么用try-catch捕获处理,要么在方法签名中声明抛出该异常。

下面提供两种可行的解决方式:

方式一:在main方法上声明抛出异常

直接在main方法的签名中添加throws NoSuchAlgorithmException,将异常向上抛给JVM处理。修改后的完整代码如下:

import javax.crypto.KeyGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

class Main {
  public static String Func(byte[] bArr) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; bArr != null && i < bArr.length; i++) {
      String hexString = Integer.toHexString(bArr[i] & 255);
      if (hexString.length() == 1) {
        sb.append('0');
      }
      sb.append(hexString);
    }
    return sb.toString();
  }

  public static void main(String[] args) throws NoSuchAlgorithmException {
    String[] strArr = new String[2];
    KeyGenerator generator = KeyGenerator.getInstance("AES");
    SecureRandom secureRandom = new SecureRandom();
    generator.init(128, secureRandom);
    strArr[0] = Func(generator.generateKey().getEncoded());
    System.out.println(strArr[0]);
  }
}

方式二:用try-catch捕获并处理异常

将可能抛出异常的代码块包裹在try-catch中,自定义异常处理逻辑(比如打印错误信息)。修改后的完整代码如下:

import javax.crypto.KeyGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

class Main {
  public static String Func(byte[] bArr) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; bArr != null && i < bArr.length; i++) {
      String hexString = Integer.toHexString(bArr[i] & 255);
      if (hexString.length() == 1) {
        sb.append('0');
      }
      sb.append(hexString);
    }
    return sb.toString();
  }

  public static void main(String[] args) {
    String[] strArr = new String[2];
    try {
      KeyGenerator generator = KeyGenerator.getInstance("AES");
      SecureRandom secureRandom = new SecureRandom();
      generator.init(128, secureRandom);
      strArr[0] = Func(generator.generateKey().getEncoded());
      System.out.println(strArr[0]);
    } catch (NoSuchAlgorithmException e) {
      // 可根据需求添加自定义处理逻辑,例如记录日志
      e.printStackTrace();
    }
  }
}

注意:两种方式都需要导入java.security.NoSuchAlgorithmException类,否则编译器会提示找不到该异常类型。另外,"AES"是Java标准库支持的算法,正常运行环境下不会实际触发这个异常,但语法上必须按要求处理。

内容的提问来源于stack exchange,提问作者Someone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:46:08