2011-04-27 111 views
21

我已簽署我的應用程序並將其導出到桌面上的一個文件夾中,此文件夾中的應用程序是我的應用程序本身和密鑰存儲區。我如何找到可以複製到Facebook開發者頁面的關鍵散列。我已經OpenSSL的安裝,但不能似乎產生密鑰散列香港專業教育學院嘗試了許多疊其他線程並沒有一個似乎幫助,感謝找到已簽名應用程序的密鑰哈希值

詹姆斯

+0

香港專業教育學院看到,但它沒有工作,只是說:密鑰工具是一個無效的命令 – James 2011-04-27 12:50:56

+0

所以找到keytool .....與谷歌...> Java SDK – Selvin 2011-04-27 12:57:00

+0

你是什麼意思?我真的不知道我在做什麼,我只是想在我的手機上工作 – James 2011-04-27 13:03:00

回答

49
  1. 你應該知道哪裏是你的密鑰庫文件。對我來說是C:\Users\Selvin\Desktop\selvin.kp
  2. 你應該知道你在密鑰庫中的別名。對我來說是selvin
  3. 你應該知道keytool的路徑。 C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
  4. 你應該知道openssl的路徑。 C:\OpenSSL-Win32\bin\openssl.exe
  5. 您應該知道密鑰庫的密碼。對我來說是*****嘿嘿

然後,你應該叫:

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe" -exportcert -alias selvin -keystore c:\users\selvin\desktop\selvin.kp | C:\OpenSSL-Win32\bin\openssl sha1 -binary | C:\OpenSSL-Win32\bin\openssl base64

更換我的路徑和別名適當的。

那麼你應該看到:

Enter keystore password:

輸入您的密碼,你應該得到這樣的事情:NfhDlIH7XWJzUZRjL+pZySrMX1Q=

EDITEDNfgDlIG7XWJzUZRUL+bZySrMX1Q= < - 是一個糟糕的哈希值。或者你有這麼幸運,你的鑰匙由相同的碰撞爲

error:keytool error: java.lang.Exception: Alias does not exist

如果哈希不工作:

首先,撥打

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe" -exportcert -alias selvin -keystore c:\users\selvin\desktop\selvin.kp

類型的密碼和讀取錯誤

如果你不記得你的別名keytool error: java.lang.Exception: Alias <selvinn> does not exist我用selvinn顯示錯誤。

對於所有輸入/別名的列表:

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe -list -keystore c:\users\selvin\desktop\selvin.kp

第二編輯

enter image description here

+2

我愛你<3 :) – James 2011-04-27 14:01:11

+1

別名是什麼意思?或者沒有關係? – James 2011-04-27 14:09:26

+0

看到我的編輯它應該是相同的,你用於簽署的應用程序在日食 – Selvin 2011-04-27 14:11:47

14

首先,我要感謝Selvin!

這個答案几乎是相同的Selvin的答案,但它還是花了我3個小時得到它的工作:P所以對於真正的newbs

多一點的教程如何從密鑰庫獲得hashKey

  • 首先從谷歌代碼安裝OpenSSL和把它放在你的C:\文件夾 download link
  • 找到keytool程序位置(在Java中 文件夾默認)
  • 查找密鑰存儲位置(存在調試默認值)

位置keytool的C:\ Program Files文件(x86)的\的Java \ jdk1.xxx)\ BIN \密鑰工具 位置OpenSSL的C:\的OpenSSL的Win32 \ BIN \ OpenSSL的 位置(調試)密鑰庫C:\用戶[usernamepc] .android \ debug.keystore

打開cmd在窗口(開始 - >運行> CMD)和導航到密鑰工具位置 或複製粘貼以下字符串,請注意,您不能使用ctrl + v,但右鍵點擊

cd c:\program files (x86)\java\jdk1.7.0_01\bin 

當合適的目錄粘貼此字符串中的CMD線:

keytool.exe -exportcert -alias androiddebugkey -keystore c:\users\charx\.android\debug.keystore | C:\OpenSSL-Win32\bin\openssl sha1 -binary | C:\OpenSSL-Win32\bin\openssl base64 

「C:\的OpenSSL的Win32 \ BIN \ OpenSSL的」 是opensssl.exe的路徑與openssl.exe的路徑替換它

請確保您將您的[usernamepc]更改爲您的電腦名稱,如您在我的案例中所看到的那樣是charx。此外,java jdk xxxx的目錄取決於您的版本。

CMD應顯示hashkey

爲我調試文件

哈希關鍵是

​​3210
3

我想不出這一切我看到了Facebook SDK實際上是由 發送導出我的簽署應用程序與臨時困擾代碼在授權中顯示facebook error.toString() ,它給出了它尋找的散列鍵然後把它放在我的Facebook App和賓果遊戲中!

+0

是的,我做到了這一點,除了當facebook失敗時logcat顯示關鍵字。花了大約1分鐘的時間做。 – 2012-08-08 09:38:05

21

對於那些仍在苦苦掙扎的人,我發現這些步驟在正確使用後肯定會起作用,但他們對於第一次正確使用可能相當具有挑戰性,實際上我發現有時在處理某些別名時base64轉換指紋'不起作用(由於某種原因哈希會被截斷)。我已經寫了各種批處理文件,將大多數已經提到的說明放在一起,所以我不排除有問題。

然而,基本上大多數人在openssl階段(無法找到它,不知道如何使用它,或者Windows管道沒有正確地將輸出從SHA1導出鏈接到base64轉換輸入)。

爲了解決這個問題,你可以使用另一種方法,它可能更易於理解和理解。基本上,Facebook API需要的是用於指紋APK的SHA1哈希的base64表示(編碼)。要做到這一點,你可以只列出密鑰庫:

"C:\Program Files\Java\JRE6\Bin\keytool.exe" -list -v -keystore "Path-to-your-keystore" -storepass "KeystorePassword" > somefile.txt 

顯然,你需要根據你自己設置的路徑更改爲keytool的可執行文件,並替換「路徑到您的-密鑰庫」和「KeystorePassword」與您的密鑰庫路徑和密碼!結果應該是在當前文件夾中創建一個文件「sometext.txt」,然後可以在任何文本編輯器中打開該文件。該文本文件將列出所有密鑰庫別名及其各自的MD5和SHA1哈希值作爲十六進制字符串。

現在只需找到用於簽名APK的別名,複製SHA1哈希,然後使用任何聯機十六進制轉換爲base64轉換器將其轉換爲facebook所需的base64編碼格式。您可以通過搜索「在線十六進制到base64轉換器」找到一個在線轉換器。我一直在使用this one,因爲您只需將文本文件中的字符串複製並粘貼到提供的框中即可,它將刪除分隔每個十六進制字節的冒號。

最後一點(稍顯明顯,但..)只複製和粘貼十六進制字符串,而不是SHA1:前綴!

希望這可以幫助別人;它當然適合我!

+0

謝謝,這絕對有幫助。您提到base64轉換有時無法正常工作 - 有關修復該問題的更多細節以便不需要在線轉換器? – LocalPCGuy 2014-01-27 04:23:59

+0

對不起復活,但我得到的SHA1是這個 'SHA1:3C:FB:ED:25:2A:48:D4:D9:E6:11:CA:B6:E2:8A:80:7C:FE :68:7D:71' – Roi 2016-06-10 11:19:49

9

Eclipse解決方案(適用於像我這樣的懶人)。

選擇在Eclipse中導出任何項目 - Android應用程序,輸入您的密鑰通等,並在底部的最後一頁上,你會看到 MD5:.... SHA1:....

複製SHA1字符串並將其粘貼到任何HEX-Base64在線轉換器中(例如:這一個:http://tomeko.net/online_tools/hex_to_base64.php

恭喜!您已獲得Facebook開發控制檯所需的關鍵哈希值。

+0

這個方法真的對我有效。 – 2014-09-22 15:14:20

3

上述方案並沒有爲我工作,出於某種原因,但我能夠成功產生keyhash。我寫了10最容易的一步得到keyhash您簽署的apk 的[APK使用密鑰庫簽署]

  1. 複製下面的代碼到你的activity [start Activity]。這代碼應該包含在您的活動,這樣就可以當你簽名的apk活動開始時提取正確的密鑰散列。

    private void getHashKey() { 
    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) { 
    } } 
    
  2. AndroidManifest.xml文件應該在其應用標籤的屬性android:allowBackup="true"

  3. 導出已簽名的apk並在手機中安裝該應用,然後以調試模式將手機連接到usb debugging on

  4. 然後去sdk\platform-tools

  5. 打開命令提示符,然後鍵入adb devices查看您的設備是否連接與否。如果沒有列出的設備,然後嘗試繼續下一步之前解決這個問題。

  6. 然後輸入adb logcat >"log.txt"。你的cmd屏幕會被吊死。 不要恐慌。它完美正常的,因爲整個的logcat被寫入log.txt

  7. 運行你的應用程序,並希望當你認爲在執行getHashKey() 功能,然後按ctrl+c在命令提示符下結束日誌文件寫入。

  8. 現在命令提示符會再次變爲響應。現在進入 您的sdk\platform-tools目錄,您將看到已創建包含日誌的log.txt文件 。

  9. 現在在texteditor打開它,然後搜索「-----------你keyhash -------」

  10. 拷貝到您的FB account或徘徊無論你需要然後再進行另一次構建,其中android:allowBackup="false"getHashKey()功能被刪除,其中 已刪除。

希望這有助於大家:)

+0

您也可以在android studio中監視logcat輸出,並搜索「MY_KEY_HASH」以節省幾步 – 2017-01-12 22:12:06

+0

很好的答案。爲我工作。 – 2017-08-29 09:10:28

0

如果您使用alies使用這個命令來查找密鑰庫alies

keytool -list -v -keystore keystore.jks | findstr "Alias Creation"