All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dongliu.apk.parser.parser.CetificateParser Maven / Gradle / Ivy

package net.dongliu.apk.parser.parser;

import net.dongliu.apk.parser.bean.CertificateMeta;
import net.dongliu.apk.parser.utils.Utils;
import sun.security.pkcs.PKCS7;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

/**
 * parser Cetificater info.
 *
 * @author dongliu
 */
public class CetificateParser {

    private InputStream in;

    private List certificateMetas;

    public CetificateParser(InputStream in) {
        this.in = new BufferedInputStream(in);
    }

    public void parse() throws IOException, CertificateEncodingException {

        PKCS7 pkcs7 = new PKCS7(Utils.toByteArray(in));
        X509Certificate[] publicKey = pkcs7.getCertificates();
        certificateMetas = new ArrayList();
        for (X509Certificate cetificate : publicKey) {
            CertificateMeta certificateMeta = new CertificateMeta();
            byte[] bytes = cetificate.getEncoded();
            String signature = md5Digest(bytes);
            String publicKeyString = byteToHexString(cetificate.getEncoded());
            String base64Signature = md5Digest(publicKeyString);
            certificateMeta.setData(bytes);
            certificateMeta.setBase64Signature(base64Signature);
            certificateMeta.setSignature(signature);
            certificateMetas.add(certificateMeta);
        }
    }

    private String md5Digest(byte[] input) throws IOException {
        MessageDigest digest = getDigest("Md5");
        digest.update(input);
        return getHexString(digest.digest());
    }

    private String md5Digest(String input) throws IOException {
        MessageDigest digest = getDigest("Md5");
        digest.update(input.getBytes("UTF-8"));
        return getHexString(digest.digest());
    }

    private String byteToHexString(byte[] bArray) {
        StringBuilder sb = new StringBuilder(bArray.length);
        String sTemp;
        for (byte aBArray : bArray) {
            sTemp = Integer.toHexString(0xFF & (char) aBArray);
            if (sTemp.length() < 2) {
                sb.append(0);
            }
            sb.append(sTemp.toUpperCase());
        }
        return sb.toString();
    }

    private String getHexString(byte[] digest) {
        BigInteger bi = new BigInteger(1, digest);
        return String.format("%032x", bi);
    }

    private MessageDigest getDigest(String algorithm) {
        try {
            return MessageDigest.getInstance(algorithm);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    public List getCertificateMetas() {
        return certificateMetas;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy