From 971da4fd17e64afc2307ee1a76b5f3676ff7057a Mon Sep 17 00:00:00 2001 From: cheney Date: Fri, 22 May 2026 11:32:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.txt | 4 ++ .../com/sunyard/cisd/device/tool/CMSUtil.java | 55 +++++++++++++++++-- 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 1.txt diff --git a/1.txt b/1.txt new file mode 100644 index 0000000..92575bc --- /dev/null +++ b/1.txt @@ -0,0 +1,4 @@ + +a06a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2 +306a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2 +316a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2 \ No newline at end of file diff --git a/src/main/java/com/sunyard/cisd/device/tool/CMSUtil.java b/src/main/java/com/sunyard/cisd/device/tool/CMSUtil.java index a413695..e6061ac 100644 --- a/src/main/java/com/sunyard/cisd/device/tool/CMSUtil.java +++ b/src/main/java/com/sunyard/cisd/device/tool/CMSUtil.java @@ -691,31 +691,78 @@ public class CMSUtil { private static boolean verifySM2Signature(PublicKey publicKey, byte[] data, byte[] signature) { try { + System.out.println(" ┌─────────────────────────────────────────────────────"); + System.out.println(" │ 验签输入信息"); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入1] 原始数据 (DER编码):"); + System.out.println(" │ 长度: " + data.length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(data)); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入2] 公钥:"); + System.out.println(" │ 算法: " + publicKey.getAlgorithm()); + System.out.println(" │ 格式: " + publicKey.getFormat()); + System.out.println(" │ 编码长度: " + publicKey.getEncoded().length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(truncate(publicKey.getEncoded(), 64))); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入3] 签名值:"); + System.out.println(" │ 长度: " + signature.length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(signature)); + System.out.println(" ├─────────────────────────────────────────────────────"); + Signature sig = Signature.getInstance("SM3withSM2", "BC"); sig.initVerify(publicKey); sig.update(data); boolean result = sig.verify(signature); - System.out.println(" 验签结果: " + (result ? "成功" : "失败")); + System.out.println(" │ [输出] 验签结果: " + (result ? "成功" : "失败")); + System.out.println(" └─────────────────────────────────────────────────────"); if (!result && data.length > 0 && data[0] == 0x30) { - System.out.println(" [GMT 0010-2012] 尝试将SEQUENCE转换为SET..."); byte[] setData = convertSequenceToSet(data); if (setData != null) { + System.out.println(" ┌─────────────────────────────────────────────────────"); + System.out.println(" │ [GMT 0010-2012] 验签输入信息 (SET格式转换)"); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入1] 原始数据 (SET格式):"); + System.out.println(" │ 长度: " + setData.length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(setData)); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入2] 公钥:"); + System.out.println(" │ 算法: " + publicKey.getAlgorithm()); + System.out.println(" │ 格式: " + publicKey.getFormat()); + System.out.println(" │ 编码长度: " + publicKey.getEncoded().length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(truncate(publicKey.getEncoded(), 64))); + System.out.println(" ├─────────────────────────────────────────────────────"); + System.out.println(" │ [输入3] 签名值:"); + System.out.println(" │ 长度: " + signature.length + " bytes"); + System.out.println(" │ Hex: " + bytesToHex(signature)); + System.out.println(" ├─────────────────────────────────────────────────────"); sig = Signature.getInstance("SM3withSM2", "BC"); sig.initVerify(publicKey); sig.update(setData); result = sig.verify(signature); - System.out.println(" SET格式验签结果: " + (result ? "成功" : "失败")); + System.out.println(" │ [输出] 验签结果: " + (result ? "成功" : "失败")); + System.out.println(" └─────────────────────────────────────────────────────"); } } return result; } catch (Exception e) { - System.out.println(" 验签失败: " + e.getMessage()); + System.out.println(" ┌─────────────────────────────────────────────────────"); + System.out.println(" │ [输出] 验签失败: " + e.getMessage()); + System.out.println(" └─────────────────────────────────────────────────────"); return false; } } + private static byte[] truncate(byte[] data, int maxLength) { + if (data.length <= maxLength) { + return data; + } + byte[] truncated = new byte[maxLength]; + System.arraycopy(data, 0, truncated, 0, maxLength); + return truncated; + } + private static byte[] convertSequenceToSet(byte[] sequenceData) { try { if (sequenceData.length < 2 || sequenceData[0] != 0x30) {