在eclipse里面编写的时候使用的是测试的签名文件
导出APK后,签名文件变更了
所以sha1、md5变更了
输入命令:keytool -list -v -keystore debug.keystore
(debug.keystore)是签名文件的名称
签名信息
cmd命令行(从签名文件获取)
keytool -list -v -keystore debug.keystore
(debug.keystore)是签名文件的名称
java代码(从APK获取)
public static String getApkSignInfo(String apkFilePath){ byte[] readBuffer = new byte[8192]; java.security.cert.Certificate[] certs = null; try{ JarFile jarFile = new JarFile(apkFilePath); Enumeration entries = jarFile.entries(); while(entries.hasMoreElements()){ JarEntry je = (JarEntry)entries.nextElement(); if(je.isDirectory()){ continue; } if(je.getName().startsWith("META-INF/")){ continue; } java.security.cert.Certificate[] localCerts = loadCertificates(jarFile,je,readBuffer); // System.out.println("File " + apkFilePath + " entry " + je.getName()+ ": certs=" + certs + " ("+ (certs != null ? certs.length : 0) + ")"); if (certs == null) { certs = localCerts; }else{ for(int i=0; i<certs.length; i++){ boolean found = false; for (int j = 0; j < localCerts.length; j++) { if (certs[i] != null && certs[i].equals(localCerts[j])) { found = true; break; } } if (!found || certs.length != localCerts.length) { jarFile.close(); return null; } } } } jarFile.close(); //Log.i("wind cert=",certs[0].toString()); return certs[0].getPublicKey().toString(); }catch(Exception e){ e.printStackTrace(); } return null; } private static java.security.cert.Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte[] readBuffer) { try { InputStream is = jarFile.getInputStream(je); while(is.read(readBuffer,0,readBuffer.length)!=-1) { } is.close(); return (java.security.cert.Certificate[])(je!=null?je.getCertificates():null); } catch (Exception e) { e.printStackTrace(); System.err.println("Exception reading "+je.getName()+" in "+jarFile.getName()+": "+e); } return null; }
结果
Sun RSA public key, 1024 bits
modulus: 1044324283335577322200223.............................
public exponent: 65537