1. 程式人生 > >獲取數字證書相關資訊,證書有效性驗證,RSA加密和解密功能之獲取證書相關資訊

獲取數字證書相關資訊,證書有效性驗證,RSA加密和解密功能之獲取證書相關資訊

 //公鑰
private PublicKey pk;

/** 後臺將證書以byte陣列的形式傳入
     * @param bytes,數字證書crt傳入的byte陣列
     * @return
     */

 public InfoEntity getCertificateInfo(byte[] bytes) {
        InfoEntity infoEntity = null;
        String key = "";
        CertificateFactory certificatefactory;
        X509Certificate Cert;
        InputStream input;
        try {
            certificatefactory = CertificateFactory.getInstance("X.509");
//將byte陣列轉為inputStream
//如果獲取的是本地專案assets目錄下的證書可以直接開啟:input = getAssets().open("證書檔名,
//如:2.cer");
            input = new ByteArrayInputStream(bytes);
            Cert = (X509Certificate) certificatefactory.generateCertificate(input);
//獲取公鑰
            pk = Cert.getPublicKey();
            if (infoEntity == null) {
//將資訊以實體類的形式傳出去
                infoEntity = new InfoEntity();
            }
            //序列號
            BigInteger serial = Cert.getSerialNumber();
            infoEntity.setSerialNum(serial);
//有效期-開始
            Date notBeforeData = Cert.getNotBefore();
            infoEntity.setUlBefore(notBeforeData);
//有效期-結束
            Date notAfterData = Cert.getNotAfter();
            infoEntity.setUlAfter(notAfterData);
            //獲得證書頒發機構
            String issuer = Cert.getIssuerX500Principal().getName();
            infoEntity.setIssuer(issuer);
            //域名,證書中的域名得到的資料並不只是有域名,所以用正則匹配截取出來
            String name = Cert.getSubjectDN().getName();
            StringBuilder stringBuilder = new StringBuilder();
            Pattern p = Pattern.compile("(?<=CN\\=).*?(?=,|(s*$))");
            Matcher m = p.matcher(name);
            while (m.find()) {
                stringBuilder.append(m.group());
            }
            infoEntity.setOwnerUrl(stringBuilder.toString());
//將公鑰解密出來
            key = Base64.encodeToString(pk.getEncoded(), Base64.NO_WRAP);
            infoEntity.setPubKey(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return infoEntity;
    }

 

/**
     * 獲取證書的相關資訊
     */
    class InfoEntity {
        //序列號
        private BigInteger serialNum;
        //公鑰
        private String pubKey;
        //有效期-開始
        private Date ulBefore;
        //有效期-結束
        private Date ulAfter;
        //頒發機構
        private String Issuer;
        //證書所有者授權域名
        private String ownerUrl;

        public BigInteger getSerialNum() {
            return serialNum;
        }

        public void setSerialNum(BigInteger serialNum) {
            this.serialNum = serialNum;
        }

        public String getPubKey() {
            return pubKey;
        }

        public void setPubKey(String pubKey) {
            this.pubKey = pubKey;
        }

        public Date getUlBefore() {
            return ulBefore;
        }

        public void setUlBefore(Date ulBefore) {
            this.ulBefore = ulBefore;
        }

        public Date getUlAfter() {
            return ulAfter;
        }

        public void setUlAfter(Date ulAfter) {
            this.ulAfter = ulAfter;
        }

        public String getIssuer() {
            return Issuer;
        }

        public void setIssuer(String issuer) {
            Issuer = issuer;
        }


        public String getOwnerUrl() {
            return ownerUrl;
        }

        public void setOwnerUrl(String ownerUrl) {
            this.ownerUrl = ownerUrl;
        }
    }