Получить отпечаток сертификата от приложения android
Как получить отпечаток сертификата приложения изнутри этого приложения? Я хочу проверить, записано ли приложение с моим собственным сертификатом или если оно было переупаковано / взломан.
Я нашел часть решения здесь: получить сертификат от приложения Android . Итак, теперь вопрос: как проверить отпечаток сертификата.
- Ошибка раздувания classа и файла android.support.v7.widget.CardView
- Активность Android как диалог
- как я могу получить случайную базу данных Firebase
- Почему мы должны использовать макеты xml?
- переключение назад / передняя камера на лету
- Откройте внешние ссылки в браузере с веб-браузером Android
- SecurityException: caller uid XXXX отличается от идентификатора аутентификатора
- Текст маркировки на Android
- Android - Кнопки громкости, используемые в моем приложении
- Обнаружение, когда пользователь отклонил мягкую клавиатуру
- Как объявляется Intent Service в манифесте Android?
- Странное поведение Android VideoView - «Невозможно воспроизвести видео»
- Рассчитать размер текста в соответствии с шириной области текста
Я поставил его здесь – функция дает тот же результат, что и keytool .
private String getCertificateSHA1Fingerprint() { PackageManager pm = mContext.getPackageManager(); String packageName = mContext.getPackageName(); int flags = PackageManager.GET_SIGNATURES; PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo(packageName, flags); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } Signature[] signatures = packageInfo.signatures; byte[] cert = signatures[0].toByteArray(); InputStream input = new ByteArrayInputStream(cert); CertificateFactory cf = null; try { cf = CertificateFactory.getInstance("X509"); } catch (CertificateException e) { e.printStackTrace(); } X509Certificate c = null; try { c = (X509Certificate) cf.generateCertificate(input); } catch (CertificateException e) { e.printStackTrace(); } String hexString = null; try { MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] publicKey = md.digest(c.getEncoded()); hexString = byte2HexFormatted(publicKey); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (CertificateEncodingException e) { e.printStackTrace(); } return hexString; } public static String byte2HexFormatted(byte[] arr) { StringBuilder str = new StringBuilder(arr.length * 2); for (int i = 0; i < arr.length; i++) { String h = Integer.toHexString(arr[i]); int l = h.length(); if (l == 1) h = "0" + h; if (l > 2) h = h.substring(l - 2, l); str.append(h.toUpperCase()); if (i < (arr.length - 1)) str.append(':'); } return str.toString(); }
Извините, я был быстрее ниже моего решения, спасибо за ваше время;
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PackageManager pm = this.getPackageManager(); String packageName = this.getPackageName(); int flags = PackageManager.GET_SIGNATURES; PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo(packageName, flags); } catch (NameNotFoundException e) { e.printStackTrace(); } Signature[] signatures = packageInfo.signatures; byte[] cert = signatures[0].toByteArray(); InputStream input = new ByteArrayInputStream(cert); CertificateFactory cf = null; try { cf = CertificateFactory.getInstance("X509"); } catch (CertificateException e) { e.printStackTrace(); } X509Certificate c = null; try { c = (X509Certificate) cf.generateCertificate(input); } catch (CertificateException e) { e.printStackTrace(); } try { MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] publicKey = md.digest(c.getPublicKey().getEncoded()); StringBuffer hexString = new StringBuffer(); for (int i=0;i