2012-03-19 5 views
2

У меня есть андроидная библиотека. Мне нужно добавить функцию, чтобы проверить, используют ли только настоящие пользователи эту библиотеку. Для этого мне нужно прочитать значения из хранилища ключей android. Как я могу прочитать значения из хранилища ключей android?Как читать значения хранилища ключей?

+0

Что вы подразумеваете под «android keystore»? Магазин доверия сертификатов? Что именно ты пытаешься сделать? –

+0

Я имею в виду файл .keystore, который мы используем для подписи файла apk перед загрузкой на рынок. – Chrishan

+0

Хорошо, но что вы пытаетесь сделать? Этот файл существует только на рабочей станции разработчика, он никогда не включается в приложение. Вы можете получить сертификат подписи из приложения, но это не помогло бы идентифицировать «действительных» пользователей. Предоставьте более подробную информацию о вашем подходе. –

ответ

0

Вы можете использовать `PacakgeInfo.signatures 'для получения сертификата подписи приложений. Обычно есть только одна подпись, поэтому это должно дать вам сертификат (он содержит сертификат, даже если он называется «подпись»). Вы можете взять SHA1 и т. Д. Хэша блоба, чтобы иметь отпечаток пальца для сравнения.

PackageInfo pi = packageManager.getPackageInfo(getPackageName()); 
byte[] certificate = pi.signatures[0].toByteArray(); 
MessageDigest md = MessageDigest.getInstance("MD5"); 
byte[] fingerprint = md.digest(certificate); 
String hexFingerprint = toHexString(fingerprint); 

Конечно, для этой проверки работы вам необходимо встроить отпечаток пальца в свою библиотеку. Имейте в виду, что довольно легко декомпилировать его и заменить отпечаток пальца.

+0

Как я могу получить что-то вроде этого Отпечаток сертификата (MD5): 94: 1E: 43: 49: 87: 73: BB: E6: A6: 88: D7: 20: F1: 8E: B5: 98 – Chrishan

+0

Используйте ' MessageDigest' для вычисления отпечатка пальца. Тогда возможно преобразовать в шестнадцатеричную строку. См. Обновленный ответ. –

Смежные вопросы