From 595b8c5ce5dace8e553b9af3306151e267a7e8c5 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 16 Jan 2024 12:09:44 +0800 Subject: [PATCH] fix code --- .../java/org/dromara/hutool/crypto/SecureUtil.java | 5 +++++ .../provider/BouncyCastleProviderFactory.java | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/SecureUtil.java b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/SecureUtil.java index ab77546be..48ff87d20 100644 --- a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/SecureUtil.java +++ b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/SecureUtil.java @@ -12,6 +12,7 @@ package org.dromara.hutool.crypto; +import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.codec.binary.Base64; import org.dromara.hutool.core.codec.HexUtil; import org.dromara.hutool.core.lang.Validator; @@ -503,6 +504,10 @@ public class SecureUtil { * @since 4.1.22 */ public static void addProvider(final Provider provider) { + if(ArrayUtil.contains(Security.getProviders(), provider)){ + // 如果已经注册过Provider,不再重新注册 + return; + } Security.insertProviderAt(provider, 0); } diff --git a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/provider/BouncyCastleProviderFactory.java b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/provider/BouncyCastleProviderFactory.java index 24db2e041..f431fac8b 100644 --- a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/provider/BouncyCastleProviderFactory.java +++ b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/provider/BouncyCastleProviderFactory.java @@ -15,6 +15,7 @@ package org.dromara.hutool.crypto.provider; import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.security.Provider; +import java.security.Security; /** * {@link BouncyCastleProvider} 工厂类 @@ -26,8 +27,16 @@ public class BouncyCastleProviderFactory implements ProviderFactory { @Override public Provider create() { - - return new BouncyCastleProvider(); + // pr#3464,Graalvm打包后注册会导致 + // Trying to verify a provider that was not registered at build time: BC version + // All providers must be registered and verified in the Native Image builder + // 因此此处对于已经注册过的Provider,直接复用之 + Provider provider = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME); + if(null == provider){ + provider = new BouncyCastleProvider(); + } + + return provider; } }