验签失败,入参数据长度错误。
This commit is contained in:
parent
caf29a3084
commit
aa538ee1d7
@ -32,6 +32,7 @@ public final class Gm0018AlgorithmIds {
|
|||||||
public static final int RSA_ENCRYPT = 0x00010002;
|
public static final int RSA_ENCRYPT = 0x00010002;
|
||||||
|
|
||||||
public static final int SM2_SIGN = 0x00020100;
|
public static final int SM2_SIGN = 0x00020100;
|
||||||
|
public static final int SM2_SIGN_1 = 0x00020200;
|
||||||
public static final int SM2_KEY_EXCHANGE = 0x00020200;
|
public static final int SM2_KEY_EXCHANGE = 0x00020200;
|
||||||
public static final int SM2_ENCRYPT = 0x00020400;
|
public static final int SM2_ENCRYPT = 0x00020400;
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,15 @@ public class EccRefPublicKey extends Structure {
|
|||||||
protected List<String> getFieldOrder() {
|
protected List<String> getFieldOrder() {
|
||||||
return List.of("bits", "x", "y");
|
return List.of("bits", "x", "y");
|
||||||
}
|
}
|
||||||
|
public static byte[] fromPublicKeyToBlob(PublicKey publicKey){
|
||||||
|
EccRefPublicKey eccRefPublicKey = EccRefPublicKey.fromPublicKey(publicKey);
|
||||||
|
return toBytes(eccRefPublicKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] toBytes(Structure structure) {
|
||||||
|
structure.read();
|
||||||
|
return structure.getPointer().getByteArray(0, structure.size());
|
||||||
|
}
|
||||||
|
|
||||||
public static EccRefPublicKey fromPublicKey(PublicKey publicKey) {
|
public static EccRefPublicKey fromPublicKey(PublicKey publicKey) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import com.cisd.tms.common.enums.ErrorCode;
|
|||||||
import com.cisd.tms.common.exception.BizException;
|
import com.cisd.tms.common.exception.BizException;
|
||||||
import com.cisd.tms.integration.crypto.pcie.Gm0018AlgorithmIds;
|
import com.cisd.tms.integration.crypto.pcie.Gm0018AlgorithmIds;
|
||||||
import com.cisd.tms.integration.crypto.pcie.PcieSessionTemplate;
|
import com.cisd.tms.integration.crypto.pcie.PcieSessionTemplate;
|
||||||
|
import com.cisd.tms.integration.crypto.pcie.jna.EccRefPublicKey;
|
||||||
import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult;
|
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.EccExternalVerifyRequest;
|
||||||
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
|
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
|
||||||
@ -15,6 +16,7 @@ import com.cisd.tms.modules.openapi.service.IOpenApiService;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
@ -125,9 +127,9 @@ public class OpenApiService implements IOpenApiService {
|
|||||||
|
|
||||||
log.info("找到证书: {}", cert.getSubjectDN());
|
log.info("找到证书: {}", cert.getSubjectDN());
|
||||||
|
|
||||||
// 获取证书中的公钥
|
// 将证书中的公钥转换为 EccRefPublicKey 结构
|
||||||
byte[] publicKeyBytes = cert.getPublicKey().getEncoded();
|
byte[] publicKeyBlob = EccRefPublicKey.fromPublicKeyToBlob(cert.getPublicKey());
|
||||||
log.info("公钥数据长度: {} bytes", publicKeyBytes.length);
|
log.info("公钥Blob长度: {} bytes", publicKeyBlob.length);
|
||||||
|
|
||||||
// 解码签名
|
// 解码签名
|
||||||
byte[] sign = java.util.Base64.getDecoder().decode(signature);
|
byte[] sign = java.util.Base64.getDecoder().decode(signature);
|
||||||
@ -135,8 +137,8 @@ public class OpenApiService implements IOpenApiService {
|
|||||||
|
|
||||||
// 使用外部公钥验签
|
// 使用外部公钥验签
|
||||||
EccExternalVerifyRequest request = new EccExternalVerifyRequest();
|
EccExternalVerifyRequest request = new EccExternalVerifyRequest();
|
||||||
request.setAlgId(Gm0018AlgorithmIds.SM2_SIGN);
|
request.setAlgId(Gm0018AlgorithmIds.SM2_SIGN_1);
|
||||||
request.setPublicKeyBlob(publicKeyBytes);
|
request.setPublicKeyBlob(publicKeyBlob);
|
||||||
request.setData(origBytes);
|
request.setData(origBytes);
|
||||||
request.setSignature(sign);
|
request.setSignature(sign);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user