package com.bfb.gateway.payment.unionpayat.handler.utils;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by AB045179 on 2017/9/1.
*/
public class RSAUtils {
protected final Logger logger = LoggerFactory.getLogger(RSAUtils.class);
private static final String KEY_ALGORITHM = "PKCS12";
private static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
private static final String CIPHER_TYPE = "X.509";
private static final String ENCRYPT_TYPE = "RSA";
private PublicKey publicKey;
private PrivateKey privateKey;
//初始化证书
public void initCert(String priKeyPath, String alias, String password, String pubKeyPath) {
try {
logger.info("证书初始化开始!");
KeyStore keystore = KeyStore.getInstance(KEY_ALGORITHM);
keystore.load(new FileInputStream(new File(priKeyPath)), password.toCharArray());
privateKey = (PrivateKey) keystore.getKey(alias, password.toCharArray());
CertificateFactory certificateFactory = CertificateFactory.getInstance(CIPHER_TYPE);
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(new FileInputStream(new File(pubKeyPath)));
publicKey = cert.getPublicKey();
logger.info("证书初始化结束!");
} catch (Exception e) {
logger.error("证书初始化异常!{}{}", e.getMessage(), e);
}
}
//签名
public String signater(String xml) {
try {
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(privateKey);
signature.update(xml.getBytes("UTF-8"));
byte[] result = signature.sign();
return new String(Base64.encodeBase64String(result));
} catch (Exception e) {
logger.error("签名异常!{}{}", e.getMessage(), e);
}
return "";
}
//验签
public boolean verify(String xml, String signStr) {
try {
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(publicKey);
signature.update(xml.getBytes());
return signature.verify(Base64.decodeBase64(signStr));
} catch (Exception e) {
logger.error("验签异常!{}{}", e.getMessage(), e);
}
return false;
}
}
package com.bfb.gateway.payment.unionpayat.handler;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.bfb.gateway.payment.service.CacheService;
import com.bfb.gateway.payment.service.PayService;
import com.bfb.gateway.payment.unionpayat.handler.config.UnionpayatSettings;
import com.bfb.gateway.payment.unionpayat.handler.utils.RSAUtils;
/**
* Created by AB045179 on 2017/8/31.
*/
public class BaseHandler {
protected final Logger logger = LoggerFactory.getLogger(getClass());
protected RSAUtils RSAUtils;
@Autowired
protected UnionpayatSettings unionpayatSettings;
@Autowired
protected PayService payService;
@Autowired
protected CacheService cacheService;
protected String getPublicKeyPath() {
return unionpayatSettings.getConfCorgPath() + unionpayatSettings.getString("");
}
protected String getPrivateKeyPath() {
return unionpayatSettings.getConfCorgPath() + unionpayatSettings.getString("");
}
@PostConstruct
public void initCert() {
if (RSAUtils == null) {
RSAUtils = new RSAUtils();
RSAUtils.initCert(getPrivateKeyPath(), unionpayatSettings.getString(""),
unionpayatSettings.getString(""), getPublicKeyPath());
// 初始化CtrlNode
}
}
}