public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPackageName(mContext), PackageManager.GET_SIGNATURES); Signature[] signs = packageInfo.signatures; Signature sign = signs[0]; signcode = parseSignature(sign.toByteArray()); signcode = signcode.toLowerCase(); } catch (Exception e) { Log.e(Constants.TAG, e.getMessage(), e); } return signcode; } protected static String parseSignature(byte[] signature) { String sign = ""; try { CertificateFactory certFactory = CertificateFactory .getInstance("X.509"); X509Certificate cert = (X509Certificate) certFactory .generateCertificate(new ByteArrayInputStream(signature)); String pubKey = cert.getPublicKey().toString(); String ss = subString(pubKey); ss = ss.replace(",", ""); ss = ss.toLowerCase(); int aa = ss.indexOf("modulus"); int bb = ss.indexOf("publicexponent"); sign = ss.substring(aa + 8, bb); } catch (CertificateException e) { Log.e(Constants.TAG, e.getMessage(), e); } return sign; } public static String subString(String sub) { Pattern pp = Pattern.compile("\\s*|\t|\r|\n"); Matcher mm = pp.matcher(sub); return mm.replaceAll(""); } }