web-dev-qa-db-fra.com

Trouver la clé de hachage pour une application signée

J'ai signé mon application et je l'ai exportée dans un dossier de mon bureau appelé app dans ce dossier, qui est mon application elle-même et le magasin de clés. Comment puis-je trouver la clé de hachage que je peux copier dans la page développeurs facebook. J'ai OpenSL installé, mais ne semble pas générer la clé de hachage ive essayé de nombreux autres threads sur la pile et aucun n'a semblé aider, merci

James 

22
James
  1. Vous devez savoir où se trouve votre fichier de magasin de clés. Pour moi, c'est C:\Users\Selvin\Desktop\selvin.kp
  2. Vous devez connaître votre alias dans le magasin de clés. Pour moi, c'est selvin
  3. Vous devriez connaître le chemin d'accès à keytool. C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
  4. Vous devriez connaître le chemin vers OpenSSL. C:\OpenSSL-Win32\bin\openssl.exe
  5. Vous devez connaître le mot de passe du magasin de clés. Pour moi c'est ***** hehe

Ensuite, vous devriez appeler:

C:\Programmes\Java\jdk1.6.0_22\bin\keytool.exe "-exportcert -alias selvin -keystore c:\utilisateurs\selvin\bureau\selvin.kp | C:\OpenSSL-Win32\bin\openssl sha1 -binary | C:\OpenSSL-Win32\bin\openssl base64

Remplacez mon chemin et mon alias par ceux qui conviennent.

Alors vous devriez voir:

Entrez le mot de passe du magasin de clés:

Entrez votre mot de passe et vous devriez obtenir quelque chose comme ceci: NfhDlIH7XWJzUZRjL+pZySrMX1Q=

&EACUTE;DIT&EACUTE;: NfgDlIG7XWJzUZRUL+bZySrMX1Q= <- est un hachage incorrect. Ou vous avez eu tellement de chance que votre clé fasse la même collision que 

erreur: erreur keytool: Java.lang.Exception: l'alias n'existe pas 

Si le hachage ne fonctionne pas:

Premier appel 

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

Tapez mot de passe et lisez l'erreur

Si vous ne vous souvenez pas de votre alias keytool error: Java.lang.Exception: Alias <selvinn> does not exist, j'ai utilisé selvinn pour afficher une erreur.

Pour une liste de toutes vos entrées/alias:

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

deuxième édition

enter image description here

49
Selvin

Pour ceux qui luttent encore, j'ai constaté que ces étapes, une fois suivies correctement, fonctionneraient certainement, mais qu'elles pouvaient être assez difficiles à réussir du premier coup, et en fait, j'ai parfois constaté que la conversion de l'empreinte digitale en base64 lorsque certains pseudonymes étaient utilisés ne fonctionnait pas (le hachage est tronqué pour une raison quelconque). J'ai écrit divers fichiers de commandes qui rassemblent la plupart des instructions déjà mentionnées, de sorte que je n'exclue pas un problème.

Cependant, la plupart des gens tombent au stade openssl (soit ils ne le trouvent pas, ils ne savent pas comment l’utiliser, ou la tuyauterie Windows n’enchaîne pas correctement la sortie de l’exportation SHA1 vers l’entrée de conversion en base64).

Pour contourner ce problème, vous pouvez utiliser une méthode alternative, probablement plus facile à suivre et à comprendre. Ce que l’API de Facebook demande, c’est essentiellement la représentation en base64 (encodage) du hachage SHA1 utilisé pour identifier votre APK. Pour ce faire, vous pouvez simplement lister le magasin de clés:

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

Il est évident que vous devez modifier le chemin d'accès à l'exécutable keytool en fonction de votre propre configuration, et remplacer "Chemin d'accès à votre magasin de clés" et "KeystorePassword" par votre chemin d'accès et votre mot de passe! Le résultat devrait être la création d'un fichier "sometext.txt" dans le dossier actuel que vous pouvez ensuite ouvrir dans n'importe quel éditeur de texte. Le fichier texte répertorie tous les alias du magasin de clés et leurs hachages respectifs MD5 et SHA1 en tant que chaînes hexadécimales.

Maintenant, trouvez l’alias utilisé pour signer votre APK, copiez le hachage SHA1 et utilisez n’importe quel convertisseur hex en ligne en base64 pour le convertir au format d’encodage base64 requis par Facebook. Vous pouvez trouver un convertisseur en ligne en recherchant "convertisseur en ligne hexadécimal en base64". Je me sers de celui-ci car vous pouvez simplement copier et coller la chaîne directement du fichier texte dans la zone fournie et cela supprimera simplement les deux points qui séparent chaque octet hexadécimal.

Un dernier point (un peu évident mais ..) ne fait que copier et coller la chaîne hexagonale et PAS le préfixe SHA1:!

J'espère que cela aide quelqu'un. ça marche certainement pour moi!

21
sriggall

Je voudrais d’abord remercier Selvin! 

Cette réponse est presque identique à celle de Selvin, mais il me fallut tout de même 3 heures pour que tout se passe bien: P donc un peu plus de tutoriel pour les vrais utilisateurs.

Comment obtenir une hashKey à partir d'un magasin de clés

  • installez d’abord OpenSSL à partir de google code et placez-le dans votre dossier C:\folder lien de téléchargement
  • rechercher l'emplacement du programme keytool (par défaut dans le dossier Java )
  • rechercher l'emplacement du magasin de clés (il existe une valeur de débogage par défaut)

emplacement keytool C:\Program Files (x86)\Java\jdk1.xxx)\bin\keytool location openssl C:\OpenSSL-Win32\bin\OpenSSL emplacement (débogué) magasin de clés C:\Utilisateurs [nomutilisateur] ] .Android\debug.keystore

ouvrez cmd dans Windows (Démarrer-> Exécuter-> cmd) et accédez à l'emplacement de keytool ou copiez-collez la chaîne suivante. Notez que vous ne pouvez pas utiliser ctrl + v mais cliquez à droite.

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

quand vous êtes dans le bon répertoire, collez cette chaîne dans la ligne de commande:

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" est le chemin de opensssl.exe, remplacez-le par le chemin de votre openssl.exe.

assurez-vous de changer le nom d'utilisateur de votre ordinateur, comme vous pouvez le voir dans mon cas, il s'agit de charx. De plus, le répertoire pour le jdk Java xxxx dépend de votre version.

cmd devrait montrer hashkey

la clé de hachage pour mon fichier de débogage est

h1GdQbgB8b/liCG+acmZWkgIRHA=
14
EvertvdBraak

Une solution avec Eclipse (pour les paresseux comme moi).

Sélectionnez un projet dans Eclipse, Export - Application Android, entrez votre clé de passe, etc. et sur la dernière page en bas, vous verrez MD5: .... SHA1: ....

Copiez la chaîne SHA1 et collez-la dans n'importe quel convertisseur en ligne HEX-Base64 (par exemple celui-ci: http://tomeko.net/online_tools/hex_to_base64.php )

Félicitations! Vous avez la clé de hachage nécessaire pour Facebook Dev Console.

9
QuiteSimple

Les solutions mentionnées ci-dessus ne fonctionnaient pas pour moi pour une raison quelconque, mais j’ai réussi à générer du keyhash. J'écris la 10 étape la plus facile pour obtenir keyhash de votre apk signé [apk signé avec keystore] :

  1. Copiez le code ci-dessous dans votre activity [start Activity]. Ce code devrait être contenu dans votre activité afin que vous puissiez extraire le keyhash approprié au démarrage de l'activité de votre apk signé.

    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. Votre fichier AndroidManifest.xml doit avoir l'attribut Android:allowBackup="true" dans sa balise d'application.

  3. Exportez votre apk signé et installez l'application sur votre téléphone portable, puis connectez-le en mode débogage avec usb debugging on.

  4. Ensuite, allez à sdk\platform-tools

  5. Ouvrez la commande Invite et tapez adb devices pour voir si votre appareil est connecté ou non. si le périphérique ne figure pas dans la liste, essayez de résoudre ce problème avant de passer à l'étape suivante.

  6. Puis tapez adb logcat >"log.txt". Votre écran cmd ressemblera à un objet pendu . Ne paniquez pas. C'est parfaitement normal puisque tout le logcat est écrit dans log.txt.

  7. Exécutez votre application et, si tout va bien, lorsque vous pensez que la fonction getHashKey() Est exécutée, appuyez sur ctrl+c à l'invite de commande pour mettre fin à l'écriture du fichier journal.

  8. Maintenant, l'invite de commande redeviendra sensible. Allez maintenant dans Votre répertoire sdk\platform-tools et vous verrez qu’un fichier log.txt Contenant les journaux a été créé.

  9. Maintenant, ouvrez-le dans une texteditor et recherchez MY_KEY_HASH: "----------- Votre keyhash -------"

  10. Copiez ceci sur votre FB account ou où vous en avez besoin, puis créez une autre construction dans laquelle les fonctions Android:allowBackup="false" et getHashKey() sont enlevé.

J'espère que cela a aidé tout le monde :)

4
Sheraz Ahmad Khilji

Je ne pouvais pas être dérangé par tout cela. Je vois ce que le sdk de Facebook envoie réellement par Exportant mon application signée avec le code temporaire en place pour afficher facebook error.toString () Dans Authorize qui donne à la clé de hachage sa recherche J'ai ensuite mis ceci dans mon application facebook et bingo!

3
rich

si vous utilisez vos alliés, utilisez cette commande pour trouver un alias de magasin de clés.

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

0
Uditha Prasad