mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix code
This commit is contained in:
parent
466bb90298
commit
c64f1c8133
@ -20,7 +20,7 @@ import org.dromara.hutool.core.text.CharUtil;
|
|||||||
import org.dromara.hutool.core.text.StrUtil;
|
import org.dromara.hutool.core.text.StrUtil;
|
||||||
import org.dromara.hutool.core.util.RandomUtil;
|
import org.dromara.hutool.core.util.RandomUtil;
|
||||||
import org.dromara.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
import org.dromara.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
||||||
import org.dromara.hutool.crypto.bc.BCUtil;
|
import org.dromara.hutool.crypto.bc.ECKeyUtil;
|
||||||
import org.dromara.hutool.crypto.bc.SmUtil;
|
import org.dromara.hutool.crypto.bc.SmUtil;
|
||||||
import org.dromara.hutool.crypto.provider.GlobalProviderFactory;
|
import org.dromara.hutool.crypto.provider.GlobalProviderFactory;
|
||||||
import org.dromara.hutool.crypto.symmetric.SymmetricAlgorithm;
|
import org.dromara.hutool.crypto.symmetric.SymmetricAlgorithm;
|
||||||
@ -724,7 +724,7 @@ public class KeyUtil {
|
|||||||
* @since 4.4.4
|
* @since 4.4.4
|
||||||
*/
|
*/
|
||||||
public static byte[] encodeECPublicKey(final PublicKey publicKey) {
|
public static byte[] encodeECPublicKey(final PublicKey publicKey) {
|
||||||
return BCUtil.encodeECPublicKey(publicKey);
|
return ECKeyUtil.encodeECPublicKey(publicKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -737,7 +737,7 @@ public class KeyUtil {
|
|||||||
* @since 4.4.4
|
* @since 4.4.4
|
||||||
*/
|
*/
|
||||||
public static PublicKey decodeECPoint(final String encode, final String curveName) {
|
public static PublicKey decodeECPoint(final String encode, final String curveName) {
|
||||||
return BCUtil.decodeECPoint(encode, curveName);
|
return ECKeyUtil.decodeECPoint(encode, curveName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -750,7 +750,7 @@ public class KeyUtil {
|
|||||||
* @since 4.4.4
|
* @since 4.4.4
|
||||||
*/
|
*/
|
||||||
public static PublicKey decodeECPoint(final byte[] encodeByte, final String curveName) {
|
public static PublicKey decodeECPoint(final byte[] encodeByte, final String curveName) {
|
||||||
return BCUtil.decodeECPoint(encodeByte, curveName);
|
return ECKeyUtil.decodeECPoint(encodeByte, curveName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,22 +16,13 @@ import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
|
|||||||
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
|
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
|
||||||
import org.bouncycastle.asn1.x9.X9ECParameters;
|
import org.bouncycastle.asn1.x9.X9ECParameters;
|
||||||
import org.bouncycastle.crypto.params.ECDomainParameters;
|
import org.bouncycastle.crypto.params.ECDomainParameters;
|
||||||
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
|
|
||||||
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
|
|
||||||
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
|
|
||||||
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
|
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
|
||||||
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
|
|
||||||
import org.bouncycastle.jce.spec.ECParameterSpec;
|
import org.bouncycastle.jce.spec.ECParameterSpec;
|
||||||
import org.bouncycastle.math.ec.ECCurve;
|
|
||||||
import org.dromara.hutool.core.io.IORuntimeException;
|
import org.dromara.hutool.core.io.IORuntimeException;
|
||||||
import org.dromara.hutool.crypto.KeyUtil;
|
|
||||||
import org.dromara.hutool.crypto.SecureUtil;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
import java.security.spec.ECPoint;
|
|
||||||
import java.security.spec.ECPublicKeySpec;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bouncy Castle相关工具类封装
|
* Bouncy Castle相关工具类封装
|
||||||
@ -41,73 +32,6 @@ import java.security.spec.ECPublicKeySpec;
|
|||||||
*/
|
*/
|
||||||
public class BCUtil {
|
public class BCUtil {
|
||||||
|
|
||||||
/**
|
|
||||||
* 只获取私钥里的d,32位字节
|
|
||||||
*
|
|
||||||
* @param privateKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey
|
|
||||||
* @return 压缩得到的X
|
|
||||||
* @since 5.1.6
|
|
||||||
*/
|
|
||||||
public static byte[] encodeECPrivateKey(final PrivateKey privateKey) {
|
|
||||||
return ((BCECPrivateKey) privateKey).getD().toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
|
||||||
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
|
||||||
*
|
|
||||||
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
|
||||||
* @return 压缩得到的Q
|
|
||||||
* @since 4.4.4
|
|
||||||
*/
|
|
||||||
public static byte[] encodeECPublicKey(final PublicKey publicKey) {
|
|
||||||
return encodeECPublicKey(publicKey, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
|
||||||
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
|
||||||
*
|
|
||||||
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
|
||||||
* @param isCompressed 是否压缩
|
|
||||||
* @return 得到的Q
|
|
||||||
* @since 5.5.9
|
|
||||||
*/
|
|
||||||
public static byte[] encodeECPublicKey(final PublicKey publicKey, final boolean isCompressed) {
|
|
||||||
return ((BCECPublicKey) publicKey).getQ().getEncoded(isCompressed);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)<br>
|
|
||||||
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
|
||||||
*
|
|
||||||
* @param encode 压缩公钥
|
|
||||||
* @param curveName EC曲线名
|
|
||||||
* @return 公钥
|
|
||||||
* @since 4.4.4
|
|
||||||
*/
|
|
||||||
public static PublicKey decodeECPoint(final String encode, final String curveName) {
|
|
||||||
return decodeECPoint(SecureUtil.decode(encode), curveName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
|
|
||||||
*
|
|
||||||
* @param encodeByte 压缩公钥
|
|
||||||
* @param curveName EC曲线名,例如{@link SmUtil#SM2_DOMAIN_PARAMS}
|
|
||||||
* @return 公钥
|
|
||||||
* @since 4.4.4
|
|
||||||
*/
|
|
||||||
public static PublicKey decodeECPoint(final byte[] encodeByte, final String curveName) {
|
|
||||||
final X9ECParameters x9ECParameters = ECUtil.getNamedCurveByName(curveName);
|
|
||||||
final ECCurve curve = x9ECParameters.getCurve();
|
|
||||||
final ECPoint point = EC5Util.convertPoint(curve.decodePoint(encodeByte));
|
|
||||||
|
|
||||||
// 根据曲线恢复公钥格式
|
|
||||||
final ECNamedCurveSpec ecSpec = new ECNamedCurveSpec(curveName, curve, x9ECParameters.getG(), x9ECParameters.getN());
|
|
||||||
return KeyUtil.generatePublicKey("EC", new ECPublicKeySpec(point, ecSpec));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建ECDomainParameters对象
|
* 构建ECDomainParameters对象
|
||||||
*
|
*
|
||||||
|
@ -12,6 +12,11 @@
|
|||||||
|
|
||||||
package org.dromara.hutool.crypto.bc;
|
package org.dromara.hutool.crypto.bc;
|
||||||
|
|
||||||
|
import org.bouncycastle.asn1.x9.X9ECParameters;
|
||||||
|
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
|
||||||
|
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
|
||||||
|
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
|
||||||
|
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
|
||||||
import org.dromara.hutool.core.io.IORuntimeException;
|
import org.dromara.hutool.core.io.IORuntimeException;
|
||||||
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
|
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
|
||||||
import org.bouncycastle.asn1.sec.ECPrivateKey;
|
import org.bouncycastle.asn1.sec.ECPrivateKey;
|
||||||
@ -38,6 +43,7 @@ import java.security.InvalidKeyException;
|
|||||||
import java.security.Key;
|
import java.security.Key;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
import java.security.spec.ECPublicKeySpec;
|
||||||
import java.security.spec.KeySpec;
|
import java.security.spec.KeySpec;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,6 +54,73 @@ import java.security.spec.KeySpec;
|
|||||||
*/
|
*/
|
||||||
public class ECKeyUtil {
|
public class ECKeyUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 只获取私钥里的d,32位字节
|
||||||
|
*
|
||||||
|
* @param privateKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey
|
||||||
|
* @return 压缩得到的X
|
||||||
|
* @since 5.1.6
|
||||||
|
*/
|
||||||
|
public static byte[] encodeECPrivateKey(final PrivateKey privateKey) {
|
||||||
|
return ((BCECPrivateKey) privateKey).getD().toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
||||||
|
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
||||||
|
*
|
||||||
|
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
||||||
|
* @return 压缩得到的Q
|
||||||
|
* @since 4.4.4
|
||||||
|
*/
|
||||||
|
public static byte[] encodeECPublicKey(final PublicKey publicKey) {
|
||||||
|
return encodeECPublicKey(publicKey, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
||||||
|
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
||||||
|
*
|
||||||
|
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
||||||
|
* @param isCompressed 是否压缩
|
||||||
|
* @return 得到的Q
|
||||||
|
* @since 5.5.9
|
||||||
|
*/
|
||||||
|
public static byte[] encodeECPublicKey(final PublicKey publicKey, final boolean isCompressed) {
|
||||||
|
return ((BCECPublicKey) publicKey).getQ().getEncoded(isCompressed);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)<br>
|
||||||
|
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
||||||
|
*
|
||||||
|
* @param encode 压缩公钥
|
||||||
|
* @param curveName EC曲线名
|
||||||
|
* @return 公钥
|
||||||
|
* @since 4.4.4
|
||||||
|
*/
|
||||||
|
public static PublicKey decodeECPoint(final String encode, final String curveName) {
|
||||||
|
return decodeECPoint(SecureUtil.decode(encode), curveName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
|
||||||
|
*
|
||||||
|
* @param encodeByte 压缩公钥
|
||||||
|
* @param curveName EC曲线名,例如{@link SmUtil#SM2_DOMAIN_PARAMS}
|
||||||
|
* @return 公钥
|
||||||
|
* @since 4.4.4
|
||||||
|
*/
|
||||||
|
public static PublicKey decodeECPoint(final byte[] encodeByte, final String curveName) {
|
||||||
|
final X9ECParameters x9ECParameters = ECUtil.getNamedCurveByName(curveName);
|
||||||
|
final ECCurve curve = x9ECParameters.getCurve();
|
||||||
|
final java.security.spec.ECPoint point = EC5Util.convertPoint(curve.decodePoint(encodeByte));
|
||||||
|
|
||||||
|
// 根据曲线恢复公钥格式
|
||||||
|
final ECNamedCurveSpec ecSpec = new ECNamedCurveSpec(curveName, curve, x9ECParameters.getG(), x9ECParameters.getN());
|
||||||
|
return KeyUtil.generatePublicKey("EC", new ECPublicKeySpec(point, ecSpec));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 密钥转换为AsymmetricKeyParameter
|
* 密钥转换为AsymmetricKeyParameter
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user