From 04bc83b440eda424b1057d77a0c2e4c1db72c7a0 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 30 Oct 2024 12:00:44 +0800 Subject: [PATCH] =?UTF-8?q?SM2.signHex=E6=94=B9=E5=90=8D=E4=B8=BAsignHexFr?= =?UTF-8?q?omHex=EF=BC=8C=E5=8E=9F=E5=90=8D=E6=A0=87=E8=AE=B0=E5=BA=9F?= =?UTF-8?q?=E5=BC=83=EF=BC=8C=E9=81=BF=E5=85=8D=E6=AD=A7=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/crypto/asymmetric/SM2.java | 23 +++++++++++++++++++ .../hutool/crypto/asymmetric/SM2Test.java | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/asymmetric/SM2.java b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/asymmetric/SM2.java index 5a39ce422..943119f27 100644 --- a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/asymmetric/SM2.java +++ b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/asymmetric/SM2.java @@ -472,6 +472,29 @@ public class SM2 extends AbstractAsymmetricCrypto { // region ----- Sign and Verify + /** + * 用私钥对信息生成数字签名 + * + * @param dataHex 被签名的数据数据(Hex格式) + * @return 签名 + * @since 5.8.33 + */ + public String signHexFromHex(final String dataHex) { + return signHexFromHex(dataHex, null); + } + + /** + * 用私钥对信息生成数字签名 + * + * @param dataHex 被签名的数据数据(Hex格式) + * @param idHex 可以为null,若为null,则默认withId为字节数组:"1234567812345678".getBytes() + * @return 签名 + * @since 5.8.33 + */ + public String signHexFromHex(final String dataHex, final String idHex) { + return HexUtil.encodeStr(sign(HexUtil.decode(dataHex), HexUtil.decode(idHex))); + } + /** * 用私钥对信息生成数字签名 * diff --git a/hutool-crypto/src/test/java/org/dromara/hutool/crypto/asymmetric/SM2Test.java b/hutool-crypto/src/test/java/org/dromara/hutool/crypto/asymmetric/SM2Test.java index ba8bd1b57..fcdc81de3 100644 --- a/hutool-crypto/src/test/java/org/dromara/hutool/crypto/asymmetric/SM2Test.java +++ b/hutool-crypto/src/test/java/org/dromara/hutool/crypto/asymmetric/SM2Test.java @@ -226,7 +226,7 @@ public class SM2Test { final String id = "31323334353637383132333435363738"; final SM2 sm2 = new SM2(d, x, y); - final String sign = sm2.signHex(HexUtil.decode(data), HexUtil.decode(id)); + final String sign = sm2.signHexFromHex(data, id); Assertions.assertTrue(sm2.verifyHex(data, sign)); } @@ -249,7 +249,7 @@ public class SM2Test { final String sign = "DCA0E80A7F46C93714B51C3EFC55A922BCEF7ECF0FE9E62B53BA6A7438B543A76C145A452CA9036F3CB70D7E6C67D4D9D7FE114E5367A2F6F5A4D39F2B10F3D6"; Assertions.assertTrue(sm2.verifyHex(data, sign)); - final String sign2 = sm2.signHex(HexUtil.decode(data), HexUtil.decode(id)); + final String sign2 = sm2.signHexFromHex(data, id); Assertions.assertTrue(sm2.verifyHex(data, sign2)); }