调试通过

This commit is contained in:
cheney 2026-05-22 11:32:21 +08:00
parent 5a2c94a32c
commit 971da4fd17
2 changed files with 55 additions and 4 deletions

4
1.txt Normal file
View File

@ -0,0 +1,4 @@
a06a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2
306a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2
316a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2

View File

@ -691,31 +691,78 @@ public class CMSUtil {
private static boolean verifySM2Signature(PublicKey publicKey, byte[] data, byte[] signature) { private static boolean verifySM2Signature(PublicKey publicKey, byte[] data, byte[] signature) {
try { 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"); Signature sig = Signature.getInstance("SM3withSM2", "BC");
sig.initVerify(publicKey); sig.initVerify(publicKey);
sig.update(data); sig.update(data);
boolean result = sig.verify(signature); boolean result = sig.verify(signature);
System.out.println(" 验签结果: " + (result ? "成功" : "失败")); System.out.println(" │ [输出] 验签结果: " + (result ? "成功" : "失败"));
System.out.println(" └─────────────────────────────────────────────────────");
if (!result && data.length > 0 && data[0] == 0x30) { if (!result && data.length > 0 && data[0] == 0x30) {
System.out.println(" [GMT 0010-2012] 尝试将SEQUENCE转换为SET...");
byte[] setData = convertSequenceToSet(data); byte[] setData = convertSequenceToSet(data);
if (setData != null) { 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 = Signature.getInstance("SM3withSM2", "BC");
sig.initVerify(publicKey); sig.initVerify(publicKey);
sig.update(setData); sig.update(setData);
result = sig.verify(signature); result = sig.verify(signature);
System.out.println(" SET格式验签结果: " + (result ? "成功" : "失败")); System.out.println(" │ [输出] 验签结果: " + (result ? "成功" : "失败"));
System.out.println(" └─────────────────────────────────────────────────────");
} }
} }
return result; return result;
} catch (Exception e) { } catch (Exception e) {
System.out.println(" 验签失败: " + e.getMessage()); System.out.println(" ┌─────────────────────────────────────────────────────");
System.out.println(" │ [输出] 验签失败: " + e.getMessage());
System.out.println(" └─────────────────────────────────────────────────────");
return false; 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) { private static byte[] convertSequenceToSet(byte[] sequenceData) {
try { try {
if (sequenceData.length < 2 || sequenceData[0] != 0x30) { if (sequenceData.length < 2 || sequenceData[0] != 0x30) {