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)); }