package com.nova.sankuai.domain.api.yinsheng; import cfca.sadk.algorithm.sm2.SM2PublicKey; import cfca.sadk.org.bouncycastle.jce.provider.BouncyCastleProvider; import cfca.sadk.x509.certificate.X509Cert; import sun.misc.BASE64Decoder; import java.io.FileInputStream; import java.io.Serializable; import java.security.PublicKey; import java.security.Security; public class GMCertInfo implements Serializable { private static final long serialVersionUID = 1L; private SM2PublicKey pubKeySM2; private PublicKey pubKey; private byte[] priKey; private X509Cert x509Cert; //读取原始公钥 public static byte[] ReadPublicKeyFromRaw(String publickeyFile) throws Exception { FileInputStream br = new FileInputStream(publickeyFile); byte[] b1 = new byte[2000]; int k = br.read(b1); byte[] b = new byte[k]; System.arraycopy(b1, 0, b, 0, k); return b; } // 从X509证书文件读取公钥,Certificate只含有公钥 // .crt .cer文件都可以读取 .cer是IE导出的公钥证书(der格式) // -----BEGIN CERTIFICATE-----开始 文件头不许有其它内容 // -----END CERTIFICATE----- // cer公钥证书 二进制 public void ReadPublicKeyFromX509CertificateSM2(String cerFilePath) throws Exception { Security.addProvider(new BouncyCastleProvider()); byte[] cer = ReadPublicKeyFromRaw(cerFilePath); ReadPublicKeyFromX509CertificateSM2(cer); } public void ReadPublicKeyFromX509CertificateSM2Str(String pubKey) throws Exception { Security.addProvider(new BouncyCastleProvider()); ReadPublicKeyFromX509CertificateSM2(new BASE64Decoder().decodeBuffer(pubKey)); } public void ReadPublicKeyFromX509CertificateSM2(byte[] cer) throws Exception { Security.addProvider(new BouncyCastleProvider()); x509Cert = new X509Cert(cer); //获取公钥对象 pubKeySM2 = (SM2PublicKey) x509Cert.getPublicKey(); pubKey = x509Cert.getPublicKey(); } public SM2PublicKey getPubKeySM2() { return pubKeySM2; } public void setPubKeySM2(SM2PublicKey pubKeySM2) { this.pubKeySM2 = pubKeySM2; } public PublicKey getPubKey() { return pubKey; } public void setPubKey(PublicKey pubKey) { this.pubKey = pubKey; } public byte[] getPriKey() { return priKey; } public void setPriKey(byte[] priKey) { this.priKey = priKey; } public X509Cert getX509Cert() { return x509Cert; } public void setX509Cert(X509Cert x509Cert) { this.x509Cert = x509Cert; } }