diff --git a/CHANGELOG.md b/CHANGELOG.md index 42b10b3a8..82e29c0e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.17 (2021-12-08) +# 5.7.17 (2021-12-09) ### 🐣新特性 * 【core 】 增加AsyncUtil(pr#457@Gitee) @@ -52,6 +52,7 @@ * 【core 】 修复QueryBuilder解析路径导致的错误(issue#1989@Github) * 【core 】 修复DateTime.between中DateUnit无效问题 * 【poi 】 修复StyleUtil.getFormat非static问题(issue#I4LGNP@Gitee) +* 【crypto 】 修复SM2.getD返回bytes包含符号位的问题(issue#2001@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java b/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java index bbdd44e71..7c67abdbe 100644 --- a/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java @@ -1,6 +1,7 @@ package cn.hutool.core.math; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; public class CalculatorTest { @@ -30,7 +31,7 @@ public class CalculatorTest { } @Test -// @Ignore + @Ignore public void conversationTest5(){ // https://github.com/dromara/hutool/issues/1984 final double conversion = Calculator.conversion("((1/1) / (1/1) -1) * 100"); diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/SM2.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/SM2.java index b221a1ba8..278ecf1cc 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/SM2.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/SM2.java @@ -19,7 +19,9 @@ import org.bouncycastle.crypto.signers.DSAEncoding; import org.bouncycastle.crypto.signers.PlainDSAEncoding; import org.bouncycastle.crypto.signers.SM2Signer; import org.bouncycastle.crypto.signers.StandardDSAEncoding; +import org.bouncycastle.util.BigIntegers; +import java.math.BigInteger; import java.security.PrivateKey; import java.security.PublicKey; @@ -519,7 +521,27 @@ public class SM2 extends AbstractAsymmetricCrypto { * @since 5.5.9 */ public byte[] getD() { - return this.privateKeyParams.getD().toByteArray(); + return BigIntegers.asUnsignedByteArray(getDBigInteger()); + } + + /** + * 获得私钥D值(编码后的私钥) + * + * @return D值 + * @since 5.7.17 + */ + public String getDHex() { + return getDBigInteger().toString(16); + } + + /** + * 获得私钥D值 + * + * @return D值 + * @since 5.7.17 + */ + public BigInteger getDBigInteger() { + return this.privateKeyParams.getD(); } /** diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/SM2Test.java b/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/SM2Test.java index ffb5e1dbc..3e852793d 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/SM2Test.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/SM2Test.java @@ -311,4 +311,14 @@ public class SM2Test { byte[] dec = sm2.decrypt(data, KeyType.PrivateKey); Assert.assertArrayEquals(dec, src.getBytes(StandardCharsets.UTF_8)); } + + @Test + public void dLengthTest(){ + final SM2 sm2 = SmUtil.sm2(); + Assert.assertEquals(64, sm2.getDHex().length()); + Assert.assertEquals(32, sm2.getD().length); + + // 04占位一个字节 + Assert.assertEquals(65, sm2.getQ(false).length); + } }