Facebook Android Genera hash chiave


119

Cercando di creare un'app Android con l'integrazione di Facebook, sono arrivato alla parte dei documenti in cui devi generare un file hash della chiave, specifica di eseguire il seguente codice

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore 
| openssl sha1 -binary
| openssl base64

Quando lo eseguo nel mio terminale ricevo un errore per Keystore manomesso o la password non era corretta,

Voglio solo generare il mio key hash

Qualcuno può indicarmi la giusta direzione?


2
Stai usando la password corretta?
Presidente James K. Polk

Quando inserisci il comando nel terminale non mi dà la possibilità di inserire una password
Scott

Prova a inserire solo il comando keytool senza le ultime due pipe.
Presidente James K. Polk

6
Ho capito, a volte sono così stupido, inserisci il comando su un'intera riga, non copiare e incollare
Scott

Risposte:


20

Elimina il tuo certificato di debug in ~ / .android / debug.keystore (su Linux e Mac OS X); la directory è qualcosa come% USERHOME% /. android su Windows.

Il plugin Eclipse dovrebbe quindi generare un nuovo certificato la prossima volta che proverai a creare un pacchetto di debug.

Fammi sapere se funziona.


non ha funzionato. cancellato il file debug.keystore, creato build di debug, il file non è mai tornato. notando altro in quella cartella aggiornato.
CthulhuJon

3
Non so davvero come questa sia la risposta accettata?
Enoobong

Genera HashKey per debug e modalità di rilascio usando questo. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

281

Per generare hash della chiave è necessario seguire alcuni semplici passaggi.

1) Scarica Openssl da: qui.

2) Crea una cartella openssl in C unità

3) Estrai i file Zip in questa cartella openssl creata in C Drive.

4) Copia il File debug.keystore da .android cartella nel mio caso (C: \ Users \ SYSTEM.android) e incollalo nella cartella bin JDK nel mio caso (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) Apri il prompt dei comandi e fornisci il percorso della cartella JDK Bin nel mio caso (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin).

6) Copia il seguente codice e premi invio

keytool -exportcert -alias androiddebugkey -keystore debug.keystore> c: \ openssl \ bin \ debug.txt

7) Ora devi inserire la password , Password = android.

8) Se vedi nella cartella openssl Bin, otterrai un file con il nome di debug.txt

9) Ora puoi riavviare il prompt dei comandi o lavorare con il prompt dei comandi esistente

10) torna al drive C e dai il percorso di openssl Bin cartella

11) copia il seguente codice e incolla

openssl sha1 -binary debug.txt> debug_sha.txt

12) otterrai debug_sha.txt nella cartella bin di openssl

13) Copia nuovamente il codice seguente e incolla

openssl base64 -in debug_sha.txt> debug_base64.txt

14) otterrai debug_base64.txt nella cartella openssl bin

15) apri il file debug_base64.txt Ecco il tuo key hash.


4
bella risposta +1 per te ho seguito questo e ho ottenuto il risultato desiderato :)
BBdev

Ricevo questo: errore keytool: java.io.IOException: Keystore è stato manomesso o la password non era corretta. Come posso trovare la mia password corretta?
DuyguK

Questo ha funzionato per me dopo 2 giorni di confusione su quello che stava succedendo. Ottimo lavoro!
rennoDeniro

4
@ Vizzz: bel modo di spiegare per la generazione di hash chiave. Grazie per questo post, spero che questo post farà risparmiare un sacco di tempo a qualcuno.
Emran Hamza

1
Ho provato ogni codice ma non ho mai ottenuto l'output desiderato. ho provato il codice da Facebook, è anche lo stesso solo tutti e tre i comandi in un comando, ma l'esecuzione di tre comandi separatamente ha dato il codice giusto e ha funzionato, ora di ricerca o forse giorni di ricerca. Grazie. Prima solo il codice sull'app Android dava il risultato corretto, il prompt dei comandi forniva chiavi non valide, ora va tutto bene. Grazie ancora
Diljeet

149

RISPOSTA AGGIORNATA (Generazione tramite codice) Metodo più semplice:

Nella mia esperienza, openssl essendo sempre fastidioso, ho provato il secondo metodo suggerito da facebook. Ed è meraviglioso. Questo è il metodo migliore per ottenere la chiave hash.

La seconda opzione è stampare l'hash della chiave inviato a Facebook e utilizzare quel valore. Apporta le seguenti modifiche al metodo onCreate () nella tua attività principale:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.facebook.samples.loginhowto", 
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        ...other operations

}//end of onCreate

Sostituisci com.facebook.samples.loginhowto con il nome del tuo pacchetto (nome del pacchetto in Manifest.xml).

Link ufficiale - https://developers.facebook.com/docs/android/login-with-facebook/ (Vedi in fondo alla pagina)

VECCHIA RISPOSTA (Generazione di Keyhash utilizzando openssl)

  1. per generare la firma è necessario che openssl sia installato sul tuo pc. Se non hai un download, openssl da qui
  2. In C openssl:, Crea cartella
  3. estrarre il contenuto del file zip OpenSSL scaricato nella opensslcartella in C:auto
  4. apri il prompt dei comandi
  5. passare a binof openssl ie C:\openssl\binnel prompt dei comandi
  6. esegui il seguente comando per generare il tuo keyhash. Durante la generazione di hashkey dovrebbe chiederti la password.

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

NOTA : nel codice sopra, tieni presente che devi fornire il tuo percorso all'utente (cioè nel mio caso è C: \ Users \ Anhsirk, devi solo cambiarlo per il tuo account utente.

Fornisci la password come Android

. Se non richiede la password, il percorso del keystore non è corretto.

Se tutto funziona correttamente, dovrebbe darti l'hashkey qui sotto.

inserisci qui la descrizione dell'immagine


Ricevo questo: errore keytool: java.io.IOException: Keystore è stato manomesso o la password non era corretta. Come posso trovare la mia password corretta?
DuyguK

@DuyguK - probabilmente significa che il tuo keystore esiste già. Prova a eliminarlo e ripeti. O un percorso sbagliato che potresti aver specificato
AnhSirk Dasarp

Dio, mi ci sono volute ore. Grazie mille!
Yenthe

Voglio chiedere, se il nuovo metodo (ottieni keyhash per codice) rallenta in qualche modo il processo onCreate. Perché da quello che so, quando viene creato l'APK firmato, i keyhash sono diversi. Grazie comunque per il codice! :)
marson

il metodo più semplice funzionerà senza emulatore ma sul vero dispositivo Android?

24

Il modo più semplice per generare una chiave hash.

Requisito: chiave SHA1

Puoi ottenere la chiave SHA1 dal tuo file keystore in due modi

1) Individua il tuo file keystore, apri il prompt dei comandi in quella posizione, quindi usa il comando sotto indicato

keytool -list -v -keystore {keystore_name} -alias {alias_name}

e quindi inserisci la tua password, quindi restituirà la chiave md5, sha1 e sha256.

O

2) Eseguendo signingReport

Fare riferimento all'immagine sottostante.

inserisci qui la descrizione dell'immagine

dopo aver eseguito il file, verrà generato l'output contenente la chiave sha1 richiesta.

inserisci qui la descrizione dell'immagine

Dopo aver ottenuto la chiave SHA1 richiesta

Quindi vai

http://tomeko.net/online_tools/hex_to_base64.php

e incolla la tua chiave sha1

inserisci qui la descrizione dell'immagine

e infine otterrai l'HashKey richiesto che puoi utilizzare per applicare su Facebook.


2
Questa risposta è molto più semplice delle altre poiché si preoccupa solo dell'output finale. Sempre corretto. In altri casi, se il processo di firma è configurato in modo errato, non sapremo come risolverlo.
hakuna1811

1
Fantastico lavoro come un fascino Grazie amico
Dheeraj Jaiswal

14

La chiave giusta può essere ottenuta dall'app stessa aggiungendo il seguente codice per brindare all'hash della chiave corretto (nel caso di Facebook SDK 3.0 in poi, funziona)

try {
            PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage",         PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.e("MY KEY HASH:", sign);
                Toast.makeText(getApplicationContext(),sign,         Toast.LENGTH_LONG).show();
            }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

Sostituisci com.package.mypackage con il nome del tuo pacchetto


Genera HashKey per debug e modalità di rilascio usando questo. stackoverflow.com/questions/7506392/…
Naeem Ibrahim,

12

I. Crea il debug dell'hash delle chiavi per Facebook

Aggiungi il codice per stampare l'hash della chiave per Facebook

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.google.shoppingvn", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.i("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

II. Crea rilascio hash chiave per Facebook

  1. Scarica openssl-0.9.8e_X64

  2. Crea una cartella openssl nell'unità C.

  3. Estrai i file Zip nella cartella openssl

  4. Start -> Esegui: cmd (premi invio)

  5. (premere) cd C: \ Program Files \ Java \ jdk1.6.0_45 \ bin. Nota: C: \ Program Files \ Java \ jdk1.6.0_45 \ bin: è il percorso della cartella jdk nel computer

  6. (premere) keytool -exportcert -alias gci -keystore D: \ folder \ keystorerelease | C: \ openssl \ bin \ openssl sha1 -binary | C: \ openssl \ bin \ openssl base64. Nota: D: \ folder \ keystorerelease: è il percorso del tuo keystorerelease

  7. Immettere la password del keystore: questa è la password al momento del rilascio del keystore del registro.

    Quindi avrai un hash della chiave: jDehABCDIQEDWAYz5Ow4sjsxLSw =

  8. Accedi a facebook. Accesso a Gestisci app. Incolla l'hash della chiave nella tua app su developers.facebook.com


Genera HashKey per debug e modalità di rilascio usando questo. stackoverflow.com/questions/7506392/…
Naeem Ibrahim,

9

LA SOLUZIONE PIÙ SEMPLICE DISPONIBILE PER QUESTO PROBLEMA:

Ho questo problema da due mesi ormai. I miei hash chiave sono aumentati fino a 9. Oggi ho finalmente trovato la soluzione semplice:

PASSO 1:

Installa l'SDK di Facebook che hai scaricato dalla pagina degli sviluppatori di Facebook sul tuo telefono. Non installare la normale app di Facebook. Assicurati di poter accedere a Facebook. Quindi disconnettersi.

PASSO 2:

Esporta la tua app con la tua chiave di rilascio finale come apk, come faresti quando la carichi nel Playstore.

FASE 3:

Metti il ​​file Apk sul tuo telefono tramite cavo USB o chiavetta USB.

FASE 4:

Installa la tua app utilizzando un file manager: Esempio

FASE 5:

Avvia la tua app e prova ad accedere con Facebook. Si aprirà una finestra di dialogo che ti dirà: "la chiave YOURHASHKEY non è stata trovata nella console per sviluppatori di Facebook"

FASE 6:

Annota la chiave.

FASE 7:

Mettilo nella tua console per sviluppatori Facebook e salva. Adesso hai finito. Chiunque scarichi la tua app, pubblicata con il keystore utilizzato in precedenza, può accedere a Facebook.

Godere


solo una nota: devi mettere '=' dopo la chiave copiata dal log
akshay7692

7

Se stai rilasciando, usa il keystore che hai usato per esportare la tua app e non il debug.keystore.


1
Ciao, ho provato a utilizzare il keystore della mia applicazione per generare il keyhash, ma ogni volta che provo a condividere qualcosa dalla mia applicazione mi dà l'errore che l'applicazione è configurata male per l'accesso a Facebook. ma quando provo keyhash generato tramite debug.keystore funziona. puoi aiutarmi per favore su questo?
KunalK


6

Alla fine :)

Ecco la mia storia:

  1. Aggiungi questo codice alla tua attività principale, dopo aver impostato il layout.

    try { 
      PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES);
      for (Signature signature : info.signatures) {
          MessageDigest md = MessageDigest.getInstance("SHA");
          md.update(signature.toByteArray());
          String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
          Log.e("MY KEY HASH:", sign);
          //textInstructionsOrLink = (TextView)findViewById(R.id.textstring);
          //textInstructionsOrLink.setText(sign);
          Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
      }
    } catch (NameNotFoundException e) {
        Log.d("nope","nope");
    } catch (NoSuchAlgorithmException e) {
    }
  2. Cambia PROJECTNAME con il nome del tuo pacchetto!

  3. Firma la tua app (Strumenti Android-> Esporta applicazione firmata)
  4. Nella tua attività principale in cui incolli il codice dall'opzione 2, nel tuo layout crea TextView con id textstring
  5. decommenta due righe, che il tuo codice di accesso sarebbe impostato su TextView 6 Wuolia, hai il tuo HASH, installa l'app sul tuo telefono !!! e controlla la tua hash Key!
  6. Ora quando è visibile, vai all'app Facebook che hai creato e aggiungila a [Key Hash]
  7. Tieni presente che il nome del tuo pacchetto dovrebbe essere lo stesso di Facebook [Nome pacchetto] in [Hash chiave]
  8. Buona giornata :)

5

Una soluzione di linea da generare per Facebook

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

4

Per generare l'hash della chiave di rilascio è necessario seguire alcuni semplici passaggi.

1) Scarica Openssl

2) Crea una cartella openssl nell'unità C.

3) Estrai i file Zip in questa cartella openssl creata in C Drive.

4) Copia il file debug.keystore dalla cartella .android nel mio caso (C: \ Users \ SYSTEM.android) e incollalo nella cartella bin JDK nel mio caso (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) Apri il prompt dei comandi e fornisci il percorso della cartella JDK Bin nel mio caso (C: \ Programmi \ Java \ jdk1.7.0_40 \ bin).

6) Copia il seguente codice e premi invio

keytool -exportcert -alias abcd-keystore D: \ Projects \ MyAppFolder \ keystore.txt | C: \ openssl \ bin \ openssl sha1 - binario | C: \ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias (il tuo nome alias apk cantare qui come il mio segno apk alian name è abcd) -keystore "firmato apk generato keystore apth entra qui" | "openssl bin percorso cartella inserisci qui" sha1 - binario | "openssl bin folder path enter here" base64

7) Ora devi inserire la password, Password = (inserisci qui la password del keystore del segno)

8) hai un keystore che viene utilizzato per l'hash della chiave dell'app di rilascio


3

Anche se questo thread è vecchio, vorrei condividere la mia esperienza (di recente ho iniziato a lavorare con Facebook), che mi sembra diretta:

  1. Scarica openssl dal link seguente: https://code.google.com/p/openssl-for-windows/downloads/list
  2. Decomprimilo su un'unità locale (ad esempio, C: \ openssl)
  3. Per ottenere la chiave di sviluppo per l'integrazione con Facebook, utilizzare il seguente comando dalla riga di comando in Windows:

    keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH% .android \ debug.keystore | "C: \ openssl \ bin \ openssl.exe" sha1 -binary | "C: \ openssl \ bin \ openssl.exe" base64

NOTA !: sostituire il percorso di openssl.exe (in questo esempio è "C: \ openssl \ bin \ openssl.exe") con il proprio percorso di installazione.

  1. Richiederà la password, ad es.

Immettere la password del keystore: Android

Digita Android come password come mostrato sopra.

Questo è tutto! Ti verrà data una chiave lunga 28 caratteri. Saluti!

Utilizzare la stessa procedura per ottenere la chiave di rilascio. Basta sostituire il comando con il seguente e utilizzare l'alias della chiave di rilascio.

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | "PERCORSO PER openssl.exe" sha1 -binary | openssl base64


ma mostra la richiesta della password sto fornendo anche la password firmata del keystore e poi mostra laungauge cinese
Harsha

assicurati che il percorso sia impostato correttamente per openssl \ bin e java ... \ bin
KawaiKx

3

Genera chiave hash di debug

  public String hashkey(Context context) {
        String keyhash = "";
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                keyhash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        return keyhash;
    }

Genera chiave hash di rilascio

 keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64

2

Ottimo post sul blog sull'argomento

Estrazione dell'hash della chiave dalla chiave .p12

  1. Apri Terminale o Riga di comando e vai al punto in cui si trova la tua chiave .p12.
  2. Digitare: "keytool -v -list -keystore mycert.p12 -storetype pkcs12 ″ dove mycert.p12 è il nome file della chiave .p12.
  3. Immettere la password del keystore (quella utilizzata durante l'esportazione della chiave .p12). 4. Copia il testo dei byte della firma dell'impronta digitale sha1.
  4. I byte nella firma dell'impronta digitale sha1 sono necessari per scrivere il file "sha1.bin". Puoi utilizzare un editor esadecimale per incollare i byte che hai copiato. Successivamente, salva il file come "sha1.bin".
  5. Apri di nuovo il terminale e digita: "openssl base64 -in sha1.bin -out base64.txt".
  6. Il "base64.txt" risultante conterrà l'hash della chiave necessario per Facebook.

Ottimo e semplice editor esadecimale per mac: HexFiend

OpenSSL dovrebbe essere preinstallato su Mac e qui c'è il link per la versione Windows.

collegamento


Questa è un'ottima informazione per gli sviluppatori di app Adobe AIR (Flash o Apache Flex). E il "Nome classe" per l'SSO di Facebook dovrebbe essereAppEntry
Alexander Farber,

2

Prova a passare la password per la chiave e memorizzala come parte del comando

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64

1

Sono stato in grado di eseguire l'attività richiesta con alcune delle soluzioni qui, ma ho pensato a me stesso, ragazzo che è stupido ... perché non scrivere un piccolo codice Java che fa questo e impacchettarlo in un Jar, così ho fatto. ..

Un collegamento per scaricare il vaso

Funziona su Windows 8 ... non ha provato nessun altro sistema operativo.


1
Quello che non capisco è, se mi ci sono volute un paio d'ore per imparare tutto e abbozzare questo, perché nessuna delle grandi aziende lo ha già fatto per fornirci un modo semplice per ottenere le informazioni che ci chiedono ???
TacB0sS

1

Ciao a tutti, è la mia storia su come vengo firmato ha la chiave per Facebook

prima di tutto devi solo copiare questi 2 metodi nella tua prima classe

    private void getAppKeyHash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md;

            md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String something = new String(Base64.encode(md.digest(), 0));
            System.out.println("HASH  " + something);
            showSignedHashKey(something);

        }
    } catch (NameNotFoundException e1) {
        // TODO Auto-generated catch block
        Log.e("name not found", e1.toString());
    } catch (NoSuchAlgorithmException e) {

        Log.e("no such an algorithm", e.toString());
    } catch (Exception e) {
        Log.e("exception", e.toString());
    }
}
public void showSignedHashKey(String hashKey) {

    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle("Note Signed Hash Key");
    adb.setMessage(hashKey);
    adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    adb.show();
}

** Chiama la funzione getAppKeyHash () dal tuo metodo oncreate se vuoi un hash firmato, quindi fai la build firmata installa la build firmata ed esegui otterrai la chiave hash nella finestra di dialogo, quindi annotala e aggiornala sull'account Facebook dev e commenta quella funzione e creane un'altra APK firmato **


1

Se la tua password = Android è sbagliata, inserisci la password del tuo PC che funziona per me.

E per generare keyHash prova questo link qui


0

L'unica cosa che funziona per me è usare la password android. Perché non è menzionato in nessuna guida là fuori?


0

usalo in kotlin per stampare l'hash della chiave nel registro

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.