Android : Application Signature Certificate Check: Check Your Apk certificate: To Check Your Apk certificate at runtime: I've been searching for how can i check my apk certificate at my server end...
package com.example.certcheck;
public class Environments {
public static final String Staging = "staging";
public static final String Production = "production";
public static final String Unknown = "unknown";
public static final String Debug = "debug";
}
|
package com.example.certcheck;
import java.security.MessageDigest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkCertificate();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
SignedCertificate certificate;
private void checkCertificate() {
try {
PackageManager pm = MainActivity.this.getPackageManager();
Signature sig = pm.getPackageInfo(MainActivity.this.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
String md5Fingerprint = doFingerprint(sig.toByteArray(), "MD5");
System.out.println(md5Fingerprint);
certificate = SignedCertificate.getCertificate(md5Fingerprint);
} catch (Exception e) {
System.out.println("Error getting certificate, assuming release version..."+e);
certificate = SignedCertificate.Production;
} finally {
System.out.println("Found Certificate: " + certificate.name());
System.out.println(certificate.showsLogs);
}
}
protected static String doFingerprint(byte[] certificateBytes, String algorithm)
throws Exception {
MessageDigest md = MessageDigest.getInstance(algorithm);
md.update(certificateBytes);
byte[] digest = md.digest();
String toRet = "";
for (int i = 0; i < digest.length; i++) {
if (i != 0)
toRet += ":";
int b = digest[i] & 0xff;
String hex = Integer.toHexString(b);
if (hex.length() == 1)
toRet += "0";
toRet += hex;
}
return toRet;
}
private enum SignedCertificate {
Debug("32:16:95:45:e1:ba:df:68:30:ff:24:10:10:5a:1c:17", Environments.Debug, true, true),
Staging("33:c1:9e:df:e1:f1:2c:30:b9:20:b8:d8:4b:4e:a2:ac", Environments.Staging, false, true),
Production("e3:61:60:f1:b9:a2:b0:f9:ff:7e:fa:30:a1:1b:fc:e7", Environments.Production, false, false),
Unknown("There is no such a certificate", Environments.Unknown, false, false), ;
private final String md5;
private final String environment;
private final boolean debugMode;
private final boolean showsLogs;
private SignedCertificate(String md5, String environment, boolean debugMode, boolean showsLogs) {
this.md5 = md5;
this.environment = environment;
this.debugMode = debugMode;
this.showsLogs = showsLogs;
}
public static final SignedCertificate getCertificate(String md5) {
md5 = md5.toLowerCase();
for (SignedCertificate certificate : values()) {
if (certificate.md5.toLowerCase().equals(md5))
return certificate;
}
return Unknown;
}
}
}
|
No comments:
Post a Comment