diff --git a/src/main/java/minsecurity/crypto/sm2/SM2Base.java b/src/main/java/minsecurity/crypto/sm2/SM2Base.java index e134585..de2d64c 100644 --- a/src/main/java/minsecurity/crypto/sm2/SM2Base.java +++ b/src/main/java/minsecurity/crypto/sm2/SM2Base.java @@ -14,6 +14,7 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.spec.ECParameterSpec; import org.bouncycastle.math.ec.ECPoint; import org.bouncycastle.math.ec.custom.gm.SM2P256V1Curve; +import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; import org.slf4j.LoggerFactory; import java.math.BigInteger; @@ -187,11 +188,11 @@ public class SM2Base { **/ public static byte[] byteArraytoHexByteArray(byte[] bytes){ // 16进制表示法 - StringBuilder sb = new StringBuilder(); - for(int i=0;i < bytes.length;i++) { - sb.append(String.format("%02x", bytes[i])); - } - String hexStr = sb.toString(); +// StringBuilder sb = new StringBuilder(); +// for(int i=0;i < bytes.length;i++) { +// sb.append(String.format("%02x", bytes[i])); +// } + String hexStr = ByteUtils.toHexString(bytes); return hexStr.getBytes(); } diff --git a/src/main/java/minsecurity/crypto/sm2/SM2PrivateKey.java b/src/main/java/minsecurity/crypto/sm2/SM2PrivateKey.java index fd39cec..10467ad 100644 --- a/src/main/java/minsecurity/crypto/sm2/SM2PrivateKey.java +++ b/src/main/java/minsecurity/crypto/sm2/SM2PrivateKey.java @@ -75,7 +75,7 @@ public class SM2PrivateKey implements PrivateKeyInterface { */ // TODO 实现不同 public boolean setBytes(byte[] d){ - if (d.length != 64 && d.length != 32 && d.length != 33) + if (d.length != 64 && d.length != 66 && d.length != 32 && d.length != 33) return false; switch (d.length){ case 32: @@ -83,6 +83,7 @@ public class SM2PrivateKey implements PrivateKeyInterface { privateKey = new ECPrivateKeyParameters(new BigInteger(d), SM2Base.DOMAIN_PARAMS); break; case 64: + case 66: d = SM2Base.hexByteArrayToByteArray(d); privateKey = new ECPrivateKeyParameters(new BigInteger(d), SM2Base.DOMAIN_PARAMS); break;