解决java: 无法访问org.bouncycastle.crypto.params.ECPrivateKeyParameters 找不到org.bouncycastle.crypto.param

问题描述

在更新封装加解密starter过程中,使用Hutool的国密Sm2报错。

:49:19
java: 无法访问org.bouncycastle.crypto.CipherParameters
  找不到org.bouncycastle.crypto.CipherParameters的类文件
44:26
java: 无法访问org.bouncycastle.crypto.params.ECPrivateKeyParameters
  找不到org.bouncycastle.crypto.params.ECPrivateKeyParameters的类文件

报错信息表明Java编译器无法访问org.bouncycastle.crypto.params.ECPrivateKeyParameters类。这通常意味着以下几种情况之一:

  1. 依赖缺失:项目可能缺少Bouncy Castle加密库的依赖。

    解决方法:确保项目中包含了Bouncy Castle的jar包。如果使用的是Maven或Gradle,添加相应的依赖项。
  2. 类路径未正确设置:即使已经添加了jar包,类路径也可能没有正确设置。

    解决方法:检查构建脚本或IDE设置,确保包含了Bouncy Castle jar包的路径。

  3. 错误的jar包版本:可能使用的Bouncy Castle jar包版本不兼容,或者缺少某些类。

    解决方法:检查使用的Bouncy Castle版本,确保它与项目兼容,并且包含所需的类。

  4. 安全限制:在某些情况下,Java的安全管理器可能阻止加载某些类。

    解决方法:检查是否有安全策略限制,或者是否需要添加例外。

  5. 类被混淆/改写:如果使用了ProGuard或其他混淆工具,可能需要相应地配置以保留Bouncy Castle的类。

    解决方法:更新混淆配置,以确保所需的类不被混淆或重命名。

解决方案

引入bouncycastle包。

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15on</artifactId>
  <version>1.68</version>
</dependency>

问题解决。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java 中可以使用 Bouncy Castle 库来实现 AES 解密。下面是一个简单的示例代码: ``` import org.bouncycastle.crypto.BufferedBlockCipher; import org.bouncycastle.crypto.CipherKeyGenerator; import org.bouncycastle.crypto.engines.AESFastEngine; import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.util.Base64; public class AesUtil { private static final int KEY_SIZE = 256; private static final int IV_SIZE = 128; private static final int SALT_SIZE = 8; private static final int ITERATION_COUNT = 65536; public static String decrypt(String encodeData, String passphrase) throws Exception { byte[] encryptedBytes = Base64.getDecoder().decode(encodeData); byte[] salt = new byte[SALT_SIZE]; System.arraycopy(encryptedBytes, 0, salt, 0, SALT_SIZE); byte[] iv = new byte[IV_SIZE / 8]; System.arraycopy(encryptedBytes, SALT_SIZE, iv, 0, iv.length); byte[] encrypted = new byte[encryptedBytes.length - SALT_SIZE - iv.length]; System.arraycopy(encryptedBytes, SALT_SIZE + iv.length, encrypted, 0, encrypted.length); PKCS5S2ParametersGenerator generator = new PKCS5S2ParametersGenerator(); generator.init(passphrase.getBytes(), salt, ITERATION_COUNT); KeyParameter keyParam = (KeyParameter) generator.generateDerivedParameters(KEY_SIZE); BufferedBlockCipher cipher = new BufferedBlockCipher(new CBCBlockCipher(new AESFastEngine())); cipher.init(false, new ParametersWithIV(keyParam, iv)); byte[] decrypted = new byte[cipher.getOutputSize(encrypted.length)]; int len = cipher.processBytes(encrypted, 0, encrypted.length, decrypted, 0); len += cipher.doFinal(decrypted, len); return new String(decrypted, 0, len); } } ``` 这个示例代码中使用了 Bouncy Castle 库来生成加密密钥和 IV,并使用 CBC 模式进行解密。同时也利用了 Java 内置的 AES 解密功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李景琰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值