2012-05-24 1 views
1

В подписанном apk будет файл META-INF/MANIFEST.MF. И в этом файле, мы можем найти дайджестов, как эти:Как SDK или ADT генерируют SHA1-Digest для ресурсов пакетов приложений Android

Название: Рез/макет/main.xml SHA1-Digest: NJ1YLN3mBEKTPibVXbFO8eRCAr8 =

Имя: AndroidManifest.xml SHA1-Digest: BlnC6ZBDtQYWeJNiespsQve82wY =

Имя: Рез/вытяжке-MDPI/ic_launcher.png SHA1-Digest: 4ss2KZ3FzkmfE6HAAsVu0aJKx1U =

Я нашел способ создания дайджеста в Java, как это:

public static void main(String[] args) throws NoSuchAlgorithmException, Exception { 
    MessageDigest md = MessageDigest.getInstance("sha-1"); 
    FileInputStream in = new FileInputStream("./ic_launcher.png"); 
    int bytes = 0; 
    while ((bytes = in.read()) != -1) { 
     md.update((byte)bytes); 
    } 
    in.close(); 
    byte[] thedigest = md.digest(); 
    System.out.println(Base64Encoder.encode(thedigest)); 
} 

Для тестирования я использовал этот простой код для создания некоторых дайджестов, которые в основном так же, как дайджесты META-INF/MANIFEST.MF в APK, и до сих пор есть небольшое количество исключений. Как этот Png файл: enter image description here

В APK дайджест для этого PNG файла 4ss2KZ3FzkmfE6HAAsVu0aJKx1U =, которая очень отличается от sjmKOs4BYDXg7COdeTc8tIfPBR0 = генерируемых моего код выше.

Но как объяснить, что почти 20 дайджестов, сгенерированных моим кодом, такие же, как и дайджесты в apk, и только этот дайджест Png отличается?

Не могли бы вы рассказать мне, как SDK или ADT генерируют SHA1-Digest для ресурсов пакетов приложений Android или отличий от моего кода?

Большое спасибо!

ответ

2

Инструмент Aapt Android, который создает файлы APK, выполняет некоторую обработку на своих входах. Помимо преобразования XML-ресурсов в двоичную форму, он также оптимизирует PNG-файлы. Скорее всего, вы принимаете хэш исходного файла PNG, в то время как PNG-файл в APK каким-то образом обрабатывается (сжат и т. Д.), А хэш (дайджест) отличается. Если вы разархивируете экспортированный APK и возьмите хэш PNG внутри пакета, вы должны получить то же значение хэш-функции.

+0

Вы правы! Я пробовал! Большое спасибо! – hardPass