区分获取SM2、RSA类型证书的密钥长度、秘钥算法和签名算法值

 最近不知道在忙什么,也不知道写点什么,直接丢个工具类吧~~~

  /**
   * 获取X509证书的秘钥算法和秘钥长度
   *
   * @param certificate
   * @return
   */
  public static CertInfo getKeyAlgAndLength(X509Certificate certificate) throws Exception {

      CertInfo certInfo = new CertInfo();
      //可以得到EC RSA
      String keyAlgName = certificate.getPublicKey().getAlgorithm();
      //不区分大小写比较
      if ("EC".equalsIgnoreCase(keyAlgName)) {
          keyAlgName = "SM2";
          certInfo.setKeyLength(256);
          certInfo.setKeyAlg(keyAlgName);
          return certInfo;
      } else if ("RSA".equalsIgnoreCase(keyAlgName)) {
          RSAPublicKey rsaPublicKey = (RSAPublicKey) certificate.getPublicKey();
          Integer length = rsaPublicKey.getModulus().bitLength();
          certInfo.setKeyAlg(keyAlgName);
          certInfo.setKeyLength(length);
      } else {
          throw new Exception();
      }
      return certInfo;
  }
/**
 * 接收证书秘钥算法和秘钥长度
 *
 * @author wly
 */
public class CertInfo {
    private String keyAlg;
    private int keyLength;

    public CertInfo() {
    }

    //get、set方法
}

 

顺便区分一下签名算法和秘钥算法值, 仅针对自己平时SM2和RSA的证书:

//获取秘钥算法 可以得到 EC RSA
String keyAlgName = cert.getPublicKey().getAlgorithm();
//获取证书签名算法 值为 SM2WithSM3、SHA1WithRSA、SHA256WithRSA等
String signAlgName = cert.getSigAlgName()

 

预祝大家国庆节Happy!本人已经打算回家找妈妈啦~

你可能感兴趣的:(学习笔记,RSA,SM2,密钥长度,秘钥算法,签名算法)