调试通过
This commit is contained in:
parent
5a2c94a32c
commit
971da4fd17
4
1.txt
Normal file
4
1.txt
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
a06a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2
|
||||
306a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2
|
||||
316a301906092a864886f70d010903310c060a2a811ccf550601040201301c06092a864886f70d010905310f170d3236303531323039313030315a302f06092a864886f70d01090431220420305944f62419959c6c1393e5159579203fc2a674f9d990632d3b21e0db026db2
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user