公钥格式确认

This commit is contained in:
cheney 2026-05-12 16:21:03 +08:00
parent 90ed811c1d
commit caf29a3084

View File

@ -2,10 +2,11 @@ package com.cisd.tms.modules.openapi.service.impl;
import com.cisd.tms.common.enums.ErrorCode;
import com.cisd.tms.common.exception.BizException;
import com.cisd.tms.integration.crypto.pcie.Gm0018AlgorithmIds;
import com.cisd.tms.integration.crypto.pcie.PcieSessionTemplate;
import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult;
import com.cisd.tms.integration.crypto.pcie.model.EccExternalVerifyRequest;
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2VerifyRequest;
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
import com.cisd.tms.modules.cert.entity.KeyEntity;
import com.cisd.tms.modules.cert.service.CertificateService;
@ -14,7 +15,6 @@ import com.cisd.tms.modules.openapi.service.IOpenApiService;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
import java.security.cert.X509Certificate;
@ -96,7 +96,7 @@ public class OpenApiService implements IOpenApiService {
@Override
public boolean rawVerify(byte[] origBytes, String signature, String dn) {
log.info("===== 开始执行 SM2 验签 =====");
log.info("===== 开始执行 SM2 外部公钥验签 =====");
// 入参检查
if (origBytes == null || origBytes.length == 0) {
@ -125,21 +125,26 @@ public class OpenApiService implements IOpenApiService {
log.info("找到证书: {}", cert.getSubjectDN());
// 获取证书中的公钥
byte[] publicKeyBytes = cert.getPublicKey().getEncoded();
log.info("公钥数据长度: {} bytes", publicKeyBytes.length);
// 解码签名
byte[] sign = java.util.Base64.getDecoder().decode(signature);
log.info("签名数据长度: {} bytes", sign.length);
// 验签
UserKeySm2VerifyRequest request = new UserKeySm2VerifyRequest();
request.setSignature(sign);
// 使用外部公钥验签
EccExternalVerifyRequest request = new EccExternalVerifyRequest();
request.setAlgId(Gm0018AlgorithmIds.SM2_SIGN);
request.setPublicKeyBlob(publicKeyBytes);
request.setData(origBytes);
request.setUserId(DEFAULT_SM2_USER_ID);
log.info("调用密码卡 SM2 验签接口...");
sdf.userKeyVerifyWithSm2Sm3(request);
request.setSignature(sign);
log.info("调用密码卡 SM2 外部公钥验签接口...");
sdf.eccExternalVerify(request);
log.info("验签成功");
log.info("===== SM2 验签完成 =====");
log.info("===== SM2 外部公钥验签完成 =====");
return true;
} catch (Exception e) {