读取签名信息

import sun.security.pkcs.PKCS7;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.security.GeneralSecurityException;

import java.security.cert.X509Certificate;



class SignApk {

        public static X509Certificate readSignatureBlock(InputStream in)

                        throws IOException, GeneralSecurityException {

                PKCS7 pkcs7 = new PKCS7(in);

                return pkcs7.getCertificates()[0];

        }



        public static void main(String[] args) throws FileNotFoundException,

                        IOException, GeneralSecurityException {

                X509Certificate publicKey = readSignatureBlock(new FileInputStream(

                                "D:\cert.rsa"));

                System.out.println("issuer:" + publicKey.getIssuerDN());

                System.out.println("subject:" + publicKey.getSubjectDN());

                System.out.println(publicKey.getPublicKey());

        }

}

输出内容如下:

issuer:CN=Zhang zm
subject:CN=Zhang zm
Sun RSA public key, 1024 bits
modulus: 1543085941444687053482947604843962642184531......

------------------------------------------------------------------------------------------------------------------------------------------------

Android 获取签名、公钥方法

private byte[] getSign(Context context) {



    PackageManager pm = context.getPackageManager();



    List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);



    Iterator<PackageInfo> iter = apps.iterator();



   while (iter.hasNext()) {



         PackageInfo info = iter.next();



         String packageName = info.packageName;



         //按包名 取签名



         if (packageName.equals("com.test.test")) {



            return info.signatures[0].toByteArray();

         }
  }

    return null;

}

 

public static String getPublicKey(byte[] signature) {



        try {



            CertificateFactory certFactory = CertificateFactory



                    .getInstance("X.509");



            X509Certificate cert = (X509Certificate) certFactory



                    .generateCertificate(new ByteArrayInputStream(signature));



            String publickey = cert.getPublicKey().toString();



            publickey = publickey.substring(publickey.indexOf("modulus: ") + 9,



                    publickey.indexOf("\n", publickey.indexOf("modulus:")));



            Log.d("TRACK", publickey);



            return publickey;



        } catch (CertificateException e) {



            e.printStackTrace();



        }



        return null;



}

你可能感兴趣的:(读取)