SHA256withRSA 签名与验签


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
            
        }
    }


   
}

你可能感兴趣的:(SHA256withRSA 签名与验签)