Получить отпечаток сертификата от приложения android

Как получить отпечаток сертификата приложения изнутри этого приложения? Я хочу проверить, записано ли приложение с моим собственным сертификатом или если оно было переупаковано / взломан.

Я нашел часть решения здесь: получить сертификат от приложения Android . Итак, теперь вопрос: как проверить отпечаток сертификата.

Я поставил его здесь – функция дает тот же результат, что и 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 
  • Как отправить данные из диалогового windows в fragment?
  • Где / Как getIntent (). GetExtras () в Android Fragment?
  • Дооснащение и OkHttpClient, тайм-аут соединения catch в методе сбоя
  • PopupWindow $ BadTokenException: Невозможно добавить null-token null недействительно
  • Как изменить fontFamily TextView в Android
  • Что мне делать: для этого требуется android.permission.INTERACT_ACROSS_USERS_FULL
  • Отключить или запретить мультитач в действии
  • URL-адрес исходной папки?
  • Android: Можете ли вы вложить fragmentы?
  • Почему XML используется для создания макетов пользовательского интерфейса в Android?
  • Android: Тост в streamе
  • Interesting Posts

    Java: определение терминов инициализация, декларация и присвоение

    Чистый CSS-сбой / расширение div

    Тихая установка пакета MSI

    SMS Manager отправляет сообщение mutlipart, когда имеется менее 160 символов

    Возможно ли импортировать файл реестра Windows без разрушения системы?

    Как получить разницу между двумя датами в Год / Месяц / Неделя / День?

    Bootstrap 4 Navbar и заполняющая высота контента flexbox

    Как вы можете автоматически запускать скрипт после подключения к VPN на OS X?

    Предлагается ли использовать h: outputText для всего?

    Что означает «запрос к члену« ******* »во что-то, что не является структурой или союзом?

    Bash 4 ассоциативных массива: ошибка “объявить: -A: недействительный вариант”

    Восстановление несохраненных файлов блокнота

    Установка ядер процессора не зависит от всех потоков, не указанных (предпочтительно в Windows 7)

    Как создать туннель SSH с помощью PuTTY в Windows?

    Двойная загрузка с жесткого диска Windows 7 и файла VHD Windows 7

    Давайте будем гением компьютера.