2013-07-02 84 views
22

有沒有辦法從已簽名的APK獲取密鑰哈希值? 我們有一個已簽名的Android apk文件,我們希望找出該APK的關鍵哈希值,用於Facebook SDK。 我們可以通過類似jarsigner的方式來實現嗎?
有什麼建議嗎?有沒有辦法從已簽名的APK獲取密鑰哈希值?

+0

嘗試檢查[this](http://stackoverflow.com/questions/11864700/signed-apk-has-different-key-hash-for-facebook)回答 – user1283633

回答

26

對於Windows用戶正從OpenSSL的關鍵,可能會非常棘手一些時間。我總是使用th是找到正確的 簽名..只需將此代碼粘貼到您的onCreate()並運行。

// Add code to print out the key hash 
    try { 
    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); 
    for (Signature signature : info.signatures) { 
    MessageDigest md = MessageDigest.getInstance("SHA"); 
    md.update(signature.toByteArray()); 
    Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 

    } catch (NoSuchAlgorithmException e) { 

    } 

更新:

使用的Android工作室(2.1.2):

  1. 在工作室打開項目,然後點擊圖標的gradle。
  2. 選擇應用程序 - >任務 - > Android的 - > SigningReport

這將運行gradle這個任務要打印的調試,並與MD5和SHA1鍵

+0

請注意,包名可以是任何安裝在該手機上的東西,所以你可以寫一個新的應用程序,並使用這種方法獲得其他應用程序的密鑰哈希值。 –

+0

使用Gradle 4.1,我沒有看到發佈的報告輸出是'Variant:release Config:none',任何想法爲什麼? –

+1

@ john-salib我們必須設置發佈配置frirst。 https://stackoverflow.com/questions/18460774/how-to-set-up-gradle-and-android-studio-to-do-do-release-build – amalBit

0

當我建立我的Facebook應用程序。我用我的Android密鑰庫。有一個哈希函數。通常用於Google API。(請參閱此處瞭解說明)。如果您擁有該應用並簽名,這應該是沒有問題,否則..你基本上擰了。沒有辦法。

6

您可以從here

  1. 下載openssa要生成,你需要安裝在您的PC OpenSSL的簽名。如果您 沒有一個下載的OpenSSL從這裏
  2. 在C:,創建的OpenSSL文件夾
  3. 解壓下載的OpenSSL的zip文件的內容到OpenSSL的 文件夾C:驅動
  4. 打開命令提示符
  5. 在命令提示符下移動到openssl的bin,即C:\ openssl \ bin
  6. 運行以下命令來生成你的keyhash。在生成 hashkey時,它應該詢問你的密碼。

    keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Anhsirk.android\debug.keystore" | openssl sha1 -binary | openssl base64 
    

注:在上面的代碼,請注意,你需要給你的路徑,以用戶(即在我的情況下,它是C:\用戶\ Anhsirk,你只需要改變這種對您的用戶帳戶。

提供密碼機器人,如果不問密碼密鑰庫路徑不正確。

23

在Linux上釋放證明,我用這個命令從APK拿到鑰匙哈希:

keytool -list -printcert -jarfile [path_to_your_apk] | grep -Po "(?<=SHA1:) .*" | xxd -r -p | openssl base64 

對於Mac用戶(OS X),因爲沒有grep的-P支持

keytool -list -printcert -jarfile ~/Downloads/YOURAPKFILE.apk | grep "SHA1: " | cut -d " " -f 3 | xxd -r -p | openssl base64

+0

謝謝你提供的具體問題的答案。我需要比較現有APK的散列與新散列的散列,以確保它們使用相同的密鑰簽名。像在接受的答案中那樣從密鑰庫文件生成哈希是不夠的。 –

+12

對於OSX(不支持grep -P)。 'keytool -list -printcert -jarfile〜/ Downloads/YOURAPKFILE.apk | grep「SHA1:」| cut -d「」-f 3 | xxd -r -p | openssl base64' – caller9

+1

@ caller9您的終端命令,'keytool -list -printcert -jarfile〜/ Downloads/YOURAPKFILE.apk | grep「SHA1:」| cut -d「」-f 3 | xxd -r -p | openssl base64'正是我一直在尋找的。謝謝 – VirtualProdigy

相關問題