diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java index 6695a957f..c73d91dec 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java @@ -1,6 +1,5 @@ package cn.hutool.crypto; -import cn.hutool.core.util.HexUtil; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.params.ECDomainParameters; @@ -16,8 +15,6 @@ import org.bouncycastle.math.ec.ECCurve; import java.io.InputStream; import java.math.BigInteger; -import java.security.GeneralSecurityException; -import java.security.InvalidKeyException; import java.security.Key; import java.security.PrivateKey; import java.security.PublicKey; @@ -83,12 +80,7 @@ public class BCUtil { // 根据曲线恢复公钥格式 final ECNamedCurveSpec ecSpec = new ECNamedCurveSpec(curveName, curve, x9ECParameters.getG(), x9ECParameters.getN()); - - try { - return KeyUtil.getKeyFactory("EC").generatePublic(new ECPublicKeySpec(point, ecSpec)); - } catch (GeneralSecurityException e) { - throw new CryptoException(e); - } + return KeyUtil.generatePublicKey("EC", new ECPublicKeySpec(point, ecSpec)); } /** @@ -141,27 +133,17 @@ public class BCUtil { * @since 5.2.0 */ public static AsymmetricKeyParameter toParams(Key key) { - try { - if (key instanceof PrivateKey) { - return ECUtil.generatePrivateKeyParameter((PrivateKey) key); - } else if (key instanceof PublicKey) { - return ECUtil.generatePublicKeyParameter((PublicKey) key); - } - } catch (InvalidKeyException e) { - throw new CryptoException(e); - } - - return null; + return ECKeyUtil.toParams(key); } /** * 转换为 ECPrivateKeyParameters * - * @param dHex 私钥d值16进制字符串 + * @param d 私钥d值 * @return ECPrivateKeyParameters */ - public static ECPrivateKeyParameters toSm2Params(String dHex) { - return toSm2Params(HexUtil.toBigInteger(dHex)); + public static ECPrivateKeyParameters toSm2Params(String d) { + return ECKeyUtil.toSm2PrivateParams(d); } /** @@ -182,7 +164,7 @@ public class BCUtil { * @return ECPrivateKeyParameters */ public static ECPrivateKeyParameters toSm2Params(byte[] d) { - return toSm2Params(new BigInteger(d)); + return ECKeyUtil.toSm2PrivateParams(d); } /** @@ -203,7 +185,7 @@ public class BCUtil { * @return ECPrivateKeyParameters */ public static ECPrivateKeyParameters toSm2Params(BigInteger d) { - return toParams(d, SmUtil.SM2_DOMAIN_PARAMS); + return ECKeyUtil.toSm2PrivateParams(d); } /** @@ -237,7 +219,7 @@ public class BCUtil { * @return ECPublicKeyParameters */ public static ECPublicKeyParameters toSm2Params(String xHex, String yHex) { - return toParams(xHex, yHex, SmUtil.SM2_DOMAIN_PARAMS); + return ECKeyUtil.toSm2PublicParams(xHex, yHex); } /** @@ -249,7 +231,7 @@ public class BCUtil { * @return ECPublicKeyParameters */ public static ECPublicKeyParameters toParams(String xHex, String yHex, ECDomainParameters domainParameters) { - return toParams(HexUtil.decodeHex(xHex), HexUtil.decodeHex(yHex), domainParameters); + return ECKeyUtil.toPublicParams(xHex, yHex, domainParameters); } /** @@ -260,7 +242,7 @@ public class BCUtil { * @return ECPublicKeyParameters */ public static ECPublicKeyParameters toSm2Params(byte[] xBytes, byte[] yBytes) { - return toParams(xBytes, yBytes, SmUtil.SM2_DOMAIN_PARAMS); + return ECKeyUtil.toSm2PublicParams(xBytes, yBytes); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/ECKeyUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/ECKeyUtil.java index cd9dbe8d4..bef444137 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/ECKeyUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/ECKeyUtil.java @@ -1,5 +1,6 @@ package cn.hutool.crypto; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; @@ -9,6 +10,7 @@ import org.bouncycastle.util.BigIntegers; import java.math.BigInteger; import java.security.InvalidKeyException; +import java.security.Key; import java.security.PrivateKey; import java.security.PublicKey; @@ -20,6 +22,22 @@ import java.security.PublicKey; */ public class ECKeyUtil { + /** + * 密钥转换为AsymmetricKeyParameter + * + * @param key PrivateKey或者PublicKey + * @return ECPrivateKeyParameters或者ECPublicKeyParameters + */ + public static AsymmetricKeyParameter toParams(Key key) { + if (key instanceof PrivateKey) { + return toPrivateParams((PrivateKey) key); + } else if (key instanceof PublicKey) { + return toPublicParams((PublicKey) key); + } + + return null; + } + //--------------------------------------------------------------------------- Public Key /** * 转换为 ECPublicKeyParameters