Newer
Older
thirdparty / src / main / java / com / yn / bftl / thirdparty / common / util / CryptoUtils.java
steven on 20 Aug 2 KB 百业兴项目
package com.yn.bftl.thirdparty.common.util;

import org.bouncycastle.util.encoders.Base64;
import org.bouncycastle.util.encoders.Hex;

import java.io.File;
import java.io.FileInputStream;
import java.security.*;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.X509EncodedKeySpec;

/**
 * 加密工具类
 *
 * @author huabiao
 * @create 2022/9/7  10:36
 **/
public class CryptoUtils {


    /**
     * 生成签名
     *
     * @param algorithm 签名算法
     * @param content   原文
     * @param priKey    私钥
     * @param charset   字符编码
     * @return 签名
     */
    public static String sign(String algorithm, String content, PrivateKey priKey, String charset) {
        try {
            Signature signature = Signature.getInstance(algorithm);
            signature.initSign(priKey);
            signature.update(content.getBytes(charset));
            return Hex.toHexString(signature.sign());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 验证签名
     *
     * @param algorithm 签名算法
     * @param content   原文
     * @param sign      签名
     * @param pubKey    公钥
     * @param charset   字符编码
     * @return 是否验签通过
     */
    public static boolean verifySign(String algorithm, String content, String sign, PublicKey pubKey, String charset) {
        try {
            Signature signature = Signature.getInstance(algorithm);
            signature.initVerify(pubKey);
            signature.update(content.getBytes(charset));
            return signature.verify(Hex.decode(sign));
        } catch (Exception e) {
            //验签失败
            throw new RuntimeException(e);
        }
    }


    public static PrivateKey initPrivateKeyFromFile(File file, String pwd){
        try{
            KeyStore ks = KeyStore.getInstance("PKCS12");
            FileInputStream fin = new FileInputStream(file);
            ks.load(fin, pwd.toCharArray());
            return  (PrivateKey)ks.getKey(ks.aliases().nextElement(),pwd.toCharArray());
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

}