Key hash para la aplicación Android-Facebook


229

Estoy trabajando en una aplicación de Android, en la que quiero integrar una función de publicación de Facebook. Descargué el SDK de Facebook-Android, y obtuve el readme.md (archivo de texto) allí, en el que se menciona para generar el hash clave para Android. ¿Cómo lo genero?


2
puede consultar este enlace javatechig.com/2012/12/10/…
Nilanchal

2
marque esto Para aquellos que aún enfrentan problemas,
Chintan Khetiya

Genere HashKey para el modo de depuración y liberación al usar esto. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

Para obtener las llaves, vea este video
Pronto Santos

Respuestas:


310

Aquí están los pasos

  1. Descarga openssl del código de Google (si tienes una máquina de 64 bits debes descargar openssl-0.9.8e X64, no la última versión)

  2. Extraelo. cree una carpeta: OpenSSL en C: / y copie el código extraído aquí.

  3. detectar la ruta del archivo debug.keystore. Si no lo encontró, realice una búsqueda en C: / y use la Ruta en el comando en el siguiente paso.

  4. detecte su ruta keytool.exe y vaya a ese símbolo del sistema dir / in y ejecute este comando en 1 línea-

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • pedirá contraseña, ponga android
    • eso es todo. obtendrás una clave hash

Para más información visite aquí


55
Esta respuesta casi me funcionó en Win7 x64. Sin embargo, el certificado codificado resultante era incorrecto. La respuesta de Bryan Bedard a continuación producirá el valor de certificado correcto. Supongo que la tubería en las ventanas es de alguna manera el culpable.
Walt Armor

10
Nota para usuarios de 64 bits: esto funciona con la versión openssl-0.9.8e X64 solo no se usa con openssl-0.9.8k X64
Nicola Peluchetti

Descargué openssl-0.9.8e X64 para mi sistema y lo extraje. No contiene nada excepto un archivo con algunos datos. Por favor, ayúdame a saber más.
Ravikiran

2
El comando debe ejecutarse en la carpeta bin de Java en los sistemas Windows.
Antrromet

1
@HanishSharma Intenta dejar de lado el $.
prohibición de geoingeniería

241

[EDITAR 2020] -> Ahora recomiendo totalmente la respuesta aquí , mucho más fácil con Android Studio, más rápido y sin necesidad de escribir ningún código: el siguiente estaba de vuelta en los días del eclipse :) -.

Puedes usar este código en cualquier actividad. Registrará la clave hash en el logcat, que es la clave de depuración. Esto es fácil y es un alivio que usar SSL.

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", 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));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    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());
}

Puede eliminar el código después de conocer la clave;)


27
Chicos, tengan cuidado, después de crear el apk, ¡el hash de la clave ha cambiado! porque usando este código obtienes el hash de depuración del almacén de claves, pero cuando creas apk, es otro hash, tengo que capturarlo del registro después de intentar tu apk en el emulador, luego eliminar el código y exportar nuevamente sin este registro :) - Sé que es una molestia: D pero para mí fue más fácil que keytool, buena suerte;)
Bassem Wissa

44
Opensssl siempre crea problemas. Este método es el mejor. Simplemente cree una aplicación en blanco y obtenga la clave impresa, úsela. ¡¡Gracias hombre!!
AnhSirk Dasarp

1
Esta es, con mucho, la solución más fácil. Usando el keytoolcomando estaba obteniendo los hashes clave equivocados (no tengo idea de por qué, decidí que no me importaba lo suficiente como para investigar) Esto funcionó y literalmente tomó 5 minutos para obtener la depuración y liberar hashes clave. +1
Chris Cirefice

1
Sí Sebastien, solo necesita instalar el apk firmado en un dispositivo, conectarlo a Android Studio y verificar el registro cat, o puede mostrar el hash en un texto de edición en la interfaz de usuario y copiarlo, de todos modos sí, el hash que produce este código funciona el apk firmado :)
Bassem Wissa

1
usar keytool es un desastre, esto es realmente simple
Tabish

135

He creado una pequeña herramienta para Windows y Mac OS X. Simplemente agregue el archivo de almacenamiento de claves y obtenga la clave hash.

Si desea el archivo debug.keystore predeterminado, use el alias y la contraseña predeterminados. De lo contrario, use su propio archivo de almacén de claves y valores.

Compruébelo, descargue la versión de Windows o descargue la versión de Mac OS X (Dev-Host puede estar inactivo a veces ... así que si el enlace está roto, envíeme un PM y lo arreglaré).

Espero que les ayude chicos ...

31 de diciembre de 2014 - EDITAR: cambio de host a AFH. Avísame si los enlaces están rotos

21 de noviembre de 2013 - EDITAR:

Como solicitaron los usuarios, agregué una ubicación de almacén de claves predeterminada y un botón DONAR. Siéntete libre de usarlo si te he ayudado. :)

Captura de pantalla Captura de pantalla 2


1
Mejor. Método. Nunca. ¿Dónde está el botón de donar?
Adam Varhegyi

1
@ Shahar2k5 No sé realmente, comencé de nuevo y funcionó a las mil maravillas. Lo siento
Anearion

1
¡Funciona de maravilla! Gracias por compartir :)
Vinayak

1
@Shahar Barsheshet Gracias. tienes razón. Descargado del dominio Devhost y sin problemas.
MajorGeek

1
No entiendo algo: ¿por qué su herramienta le da una clave SHA diferente, en comparación con el uso de la keytoollínea de comando? ¿No se supone que produce resultados idénticos, si se aplica al mismo archivo de almacén de claves?
arreglado el

64

Las instrucciones actualmente en el Tutorial de Android de Facebook no funcionan bien en Windows . Su ejemplo muestra cómo canalizar la salida de keytool a openssl, pero si intenta esto en Windows, la salida no es válida por algún motivo. Descubrí que tenía que usar archivos intermedios para que funcionara correctamente. Estos son los pasos que me funcionaron:

Comience descargando openssl para Windows de Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

Después de ejecutar estos comandos, el hash válido se almacena en el archivo base64.txt. Copie y pegue esto en la configuración de su aplicación en Facebook.


Funciona perfecto, todo lo demás estaba fallando.
Oliver Dixon

2
¡Qué PITA, pero Bryan tiene razón! El comando generará un hash casi sin importar qué, si su ruta es incorrecta, la contraseña es incorrecta o si las tuberías no funcionan correctamente, TODAVÍA OBTENERÁ UN HASH pero no funcionará. Entonces (en Windows) abandoné Powershell y probé Cygwin, aún no funciona. ¡Solo después de copiar el archivo debug.keystore en el directorio de trabajo podría hacerlo funcionar y funcionar!
Bobby

2
Entonces, en resumen, en Windows, use la técnica de Bryan de separarlo, o use cygwin con su archivo de almacén de claves en el directorio de trabajo: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binario | openssl base64 Si no le solicita una contraseña, entonces no encontró el archivo de almacén de claves correctamente.
Bobby

Funcionó perfectamente para mí. Gran respuesta.
Ron

Si desea evitar obtener hash para casos de contraseña incorrecta, simplemente verifique mycert.bin antes de continuar con openSSL. De lo contrario, estaría utilizando el texto de error de contraseña incorrecto :)
Vaiden

50

Esto es lo que se da en la página oficial de Facebook :

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

Déjame romper este comando en fragmentos.

  1. Busque "keytool.exe". Puede buscar eso en la unidad C:. Lo puedes encontrar en "java jdk"o "java jre". Si ha instalado varias versiones, elija cualquiera.

  2. Abra un indicador de CMD y vaya al directorio anterior donde lo encontró "keytool.exe".

    Recorte el "exe" y pegue el comando anterior proporcionado en la página de Facebook.

  3. Obtendrá un error al ingresar esto que OpenSSL no se reconoce como en el comando de entrada y salida. Solución: descargue "Openssl" de OpenSSL (si tiene una máquina de 64 bits, debe descargar openssl-0.9.8e X64 ). Extraer y guardar en cualquier lugar ... Lo guardé en la unidad C: en la OpenSSlcarpeta

  4. Reemplace el openssl en el comando anterior en el que estaba obteniendo un error de OpenSSL con "C: \ OpenSSL \ bin \ openssl" en ambos lugares después de la tubería, "|".

  5. Si se le solicita una contraseña, ingrese android.

Y obtendrá su clave hash. Para conocer más pasos, consulte nuevamente la página de Facebook.


32

Agregue este código a onCreatesu actividad, imprimirá el hash debajo de la etiqueta KeyHash en su logCat

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           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));
    }
}
catch (NameNotFoundException e) {

}
catch (NoSuchAlgorithmException e) {

}

Puede agregar múltiples hashkeys para su cuenta, por lo tanto, si ha estado ejecutando la depuración , no olvide ejecutar esto nuevamente en el modo de lanzamiento .


gran solución, supongo que no debería haber una versión ejecutable sin firmar? la versión sin firmar no debería poder instalarse en ningún dispositivo. Esas versiones de depuración están firmadas con el almacén de claves de depuración :)
benleung

26

Para obtener el código hash de la clave de Android, sigue estos pasos:

  1. Descarga OpenSSL para Windows aquí
  2. Ahora descomprime a la unidad C
  3. Abra una solicitud de CMD
  4. Tipo cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Luego escriba solo keytool -export -alias myAlias -keystore C:\Users\su nombre de usuario\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Hecho

2
Gran respuesta. Muchas gracias.
Palani Kumar

1
¿Es esto para la clave de depuración o para la clave de liberación?
IgorGanapolsky el

@IgorGanapolsky en lugar de la ruta de myKeyStore, proporcione la ruta de su clave de liberación. El código anterior es para la clave de depuración
Pallavi

17

La solución más simple que he encontrado es esta:

  • Abre Log Cat
  • Prueba y accede a Facebook con el SDK de Android
  • Busque la línea en el registro que se ve así:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • Copie "abcdefgHIJKLMN + OPqrstuvwzyz" y péguelo en el área Facebook Android Key Hash.


esta es la forma más simple y efectiva, ¡simplemente sáquelo de los registros sin siquiera openssl!
Luca C.

¡esta es la única solución trabajada para mí! ¡No veo el registro como tú, pero veo esto KeyHash: XWwXXXXX/5xxxxxxxxxxx=en el registro y me ayudó!
Khang Dinh Hoang

14

Puede obtener el hash de la clave SHA-1. Es muy simple, necesita obtener su clave SHA-1 (APK firmado) de Play Store, verifique la imagen a continuación.ingrese la descripción de la imagen aquí

Ahora copie esa clave SHA-1 y péguelo en este sitio web http://tomeko.net. También verifique la imagen a continuación para obtener su Key Hash.

ingrese la descripción de la imagen aquí


1
Gracias. Traté de obtener hash clave usando OpenSSL. Me llevó 1 minuto y fue fácil.
Verde Y.

1
¡Muchas gracias! Esta fue la solución ya que Google está firmando mi aplicación ahora (solo uso el certificado de carga / almacén de claves)
Harrison

13

He hecho de esta manera para Linux OS y Windows OS :

Linux:

  • Descargar Openssl
  • Terminal abierta
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Cambie amablemente el nombre de alias y el almacén de claves con su ruta como su requisito.

Terminal sería preguntar por la contraseña del almacén de claves. Debe proporcionar una contraseña para el mismo almacén de claves .

Así que finalmente obtendrás el Release Hashkey .

Ventanas:

Pasos para liberar Hashkey :

  • Descargar Openssl (descargar desde aquí ), he descargado para SO de 64 bits , puedes encontrar más aquí
  • Extraiga el archivo zip descargado a C: \ solo unidad
  • Abrir símbolo del sistema
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Cambie amablemente el nombre de alias y el almacén de claves con su ruta como su requisito.

Nota:

Por favor, ponga sus datos donde he marcado entre ** **.

Terminal sería preguntar por la contraseña del almacén de claves. Debe proporcionar una contraseña para el mismo almacén de claves .

Así que finalmente obtendrás el Release Hashkey .

Hecho


¿Cuál es la contraseña aquí?
Akash Bisariya

@AkashBisariya, contraseña del almacén de claves, que ha proporcionado al crear el almacén de claves.
Hiren Patel

¿Dónde puedo encontrar la clave después de generarla con éxito?
Anand Phadke

11
  • descarga openSSL para Windows aquí puedes encontrar 64 bits y 32 bits aquí

  • extraer el archivo descargado

  • crear el nombre de la carpeta openSSL en la unidad C
  • copie todos los elementos extraídos en la carpeta openSSL (bin, include, lib, openssl.cnf)
  • obtener el almacén de claves de depuración de Android, la ubicación predeterminada será

C: \ Usuarios \ nombre de usuario \ .android \ debug.keystore

  • ahora obtenga su símbolo del sistema y pegue este código

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binario | "C: \ openSSL \ bin \ openssl" base64

  • presione enter y obtendrá el código clave de 28 dígitos

NO pide contraseña. escribir androidda un hash de 24 dígitos y escribir ada un hash de 28 dígitos. No tengo idea de por qué!
sud007

malos enlaces! no tienen keytool en absoluto
KawaiKx

6

Debe crear un almacén de claves mediante la herramienta de claves para aplicaciones firmadas para Android como el procedimiento descrito en el sitio de Android y luego debe instalar cygwin y luego debe instalar openssl desde el código de Google, luego ejecute el siguiente comando y obtendrá el hash clave para Android y luego coloque esa clave hash en la aplicación de Facebook que creó. Y luego puede acceder a la aplicación de Facebook a través de la aplicación de Android para publicar el muro ("Publish_stream") podría ser un ejemplo.

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binario | openssl base64

Debe ejecutar el comando anterior desde cygwin.


6

Descargue openSSL -> Instálelo -> generalmente se instalaría en C: \ OpenSSL

luego abra cmd y escriba

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

para verificar la versión jdk vaya a C: / archivos de programa / java / jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Le pedirá una contraseña que es Android.


6
  1. Simplemente abra su archivo de actividad principal y cree la siguiente función de mención:

         try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.application.package.name",
                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 (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 Ejecute su aplicación, esto generará una clave Hash para su aplicación.

  1. Ahora, abra log cat y busque con "KeyHash" y copie la clave hash.

  2. Una vez que genera la clave Hash, puede eliminar esta función.


5

1) Cree una clave para firmar su solicitud y recuerde el alias.

2) Instalar OpenSSL.

3) Coloque la carpeta bin de OpenSSL en su ruta.

4) Siga los pasos mencionados en "Configuración del inicio de sesión único" en el FB-Android-SDK de la página , y generar su clave hash. Asegúrese de poner el alias y el nombre de archivo de almacén de claves correctos.

5) Cree una aplicación en Facebok y, en la pestaña Dispositivos móviles, ingrese esta clave hash.


5

Documentación oficial en el sitio de desarrolladores de Facebook :

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

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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) {

    }

@WilliamKinaan: en cualquier momento;): P
Hardik Thaker

@HardikThaker Usé su código, me da exactamente el mismo keyhash que obtuve usando el terminal con este comando keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64y todavía
obtengo el

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Esto funcionó para mí ...

Pasos:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

Para Linux

Terminal abierta:

Para la compilación de depuración

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

encontrará debug.keystore de la carpeta ".android", cópielo y péguelo en el escritorio y ejecute el comando anterior

Para liberar Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

NOTA: asegúrese de que en ambos casos debe solicitar la contraseña. Si no solicita contraseña, significa que algo está mal en el comando.


Recibo diferentes valores con diferentes alias, ¿cómo verificar cuál es el correcto?
Javal Nanda

¿Está pidiendo una contraseña con el nombre de alias?
Biraj Zalavadia

ya y cualquier contraseña que ingrese me da la clave hash ... mi aplicación ya está en Play Store y Native FB no funciona ahora. De todos modos, tendré que generar el hash de clave exacto para la compilación de lanzamiento. Los desarrolladores sugieren incluir código dentro de onCreate en la siguiente publicación, pero quiero que funcione sin la actualización de la aplicación en playstore stackoverflow.com/questions/15021790/…
Javal Nanda

Sí, hay un problema con las viudas con openssl. Puedes lograrlo con el código especificado en esa publicación.
Biraj Zalavadia

Si quieres prescindir de la actualización en playstore. 1) Crear una nueva aplicación Android Demp. 2) Pon esa pieza de código en crear. 3) firme esta aplicación de demostración con el mismo almacén de claves de su aplicación en la tienda de aplicaciones 4) Luego ejecute esta apk firmada 5) Y use esta clave hash finalmente
Biraj Zalavadia

4

Para una aplicación de Android

Este código se utiliza para obtener la clave hash en su aplicación de Android para la integración de Facebook. He probado todos los dispositivos y está funcionando. Solo cambie el nombre del paquete de este código:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

Como respondí en un problema similar, encontré que esto funcionaba para mí:

  • Copie el apkname.apkarchivo del que desea conocer el hash en la carpeta ' Java \ jdk1.7.0_79 \ bin '
  • Ejecute este comando keytool -list -printcert -jarfile apkname.apk
  • Copie el SHA1valor y conviértalo usando este sitio
  • Utilice el valor Keyhash convertido (por ejemplo, zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

La solución más simple:

  1. No agregue la clave hash, implemente todo lo demás
  2. Cuando se presiona el inicio de sesión de Facebook, recibirá un error que dice "Hash de clave inválido. El hash de clave" xxx "no coincide con ninguna tecla almacenada ..."
  3. Abra el panel de la aplicación de Facebook y agregue el hash "xxx =" (hash "xxx" del signo de error + "=")

3

Para generar un hash de su clave de lanzamiento, ejecute el siguiente comando en Mac o Windows sustituyendo su alias de clave de lanzamiento y la ruta a su almacén de claves.

En Windows, use:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Este comando debería generar una cadena de 28 caracteres. Recuerde que COPIE y PEGUE esta clave de lanzamiento Hash en la configuración de Android de su ID de aplicación de Facebook.

imagen: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

Consulte: https://developers.facebook.com/docs/android/getting-started#release-key-hash y http://note.taable.com


3

Use esto para imprimir clave hash en kotlin

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){

    }

2

También resolvió el mío en Android Studio pero con un enfoque ligeramente diferente.

Para obtener el valor SHA-1 en Android Studio.

  1. Haga clic en Gradle
  2. Haga clic en Informe de firma
  3. Copiar SHA-1

Haga clic en el panel marcado en el estudio de Android

  1. El valor SHA-1 se parece a este CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    y abra http://tomeko.net/online_tools/hex_to_base64.php para convertir su valor SHA1 a base64. Esto es lo que requiere Facebook: obtenga el hash generado "******************** =" y copie el hash clave en la consola de la aplicación de Facebook.

Parte de esta respuesta tomada desde aquí Enlace Github


2

Hay dos métodos disponibles , uno complejo y uno fácil.

Métodos uno: (pequeño complejo)

en primer lugar, debe descargar ssl 64bit o 32bit, en consecuencia, recuerde descargar el archivo con el nombre que contiene edespués del código de versión openssl-0.9.8e_X64.zip O openssl-0.9.8e_WIN32.zip no con el kcódigo de versión posterior,

y colóquelo en el directorio AndroidStudio / jre / bin, si no sabe dónde ubicarlo, puede encontrar este directorio haciendo clic derecho en el acceso directo de Android Studio como:

ingrese la descripción de la imagen aquí

ahora ha manejado dos cosas requeridas en un solo lugar, pero aún tiene que encontrar el camino para su debug.keystore, eso siempre se puede encontrar en el "C:\Users\yourusernamehere\.android\debug.keystore",

NOTA Si su aplicación ya está publicada, o está a punto de publicar, use su almacén de claves de firma de publicación, si está probando en modo de desarrollo y solo puede usar la depuración, keyotre

Como todo está configurado, organice el comando que desea ejecutar para la generación de la clave hash base64 format, y su comando se verá así

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

le pedirá que ingrese una contraseña para debug.keystore, que es Android de forma predeterminada. Si está utilizando su propia clave, la contraseña también será suya. la salida se verá así si todo va bien como se esperaba, espero que pueda ayudar

ingrese la descripción de la imagen aquí

Segundo método (Respectivamente fácil)

si no desea realizar todo el procedimiento anterior, simplemente use el siguiente método para registrar la clave haskey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

salida:

ingrese la descripción de la imagen aquí


1

El mejor enfoque es usar el siguiente código:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Pero estaba tan frustrante con el hecho de que no existe una herramienta simple para generar el HashKey para la aplicación de Facebook. Cada vez que tuve que jugar con Openssl y Keytool o usar un código para obtener el hash de la firma ...

Así que escribí un KeyGenTool simple que hará ese trabajo por usted: -> KeyGenTool en Google Play <-

Disfruta :)


1

Cometí un pequeño error que debería tenerse en cuenta. Si está utilizando su almacén de claves, indique su nombre de alias, no androiddebugkey

Resolví mi problema Ahora, si Facebook está instalado en mi dispositivo, entonces mi aplicación sigue obteniendo datos sobre la integración de inicio de sesión de Facebook. Solo importa tu clave hash.

Por favor ver más abajo.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Luego presione Enter: le pedirá la contraseña y luego ingrese la contraseña del almacén de claves, no Android.

Frio.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", 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));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (NameNotFoundException e1) {
                    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());
                }
            }
        });
    }



}

Este código no genera una clave hash válida para mí. La respuesta de @ Jamshid me funciona en Mac OSX.
Loolooii

0

Código de Kotlin para obtener la clave Hash

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

No olvide generar claves en el entorno de depuración y liberación, ya que cambian según la configuración de compilación.


0

prueba esto :

  • dos formas de obtener el valor clave de hash

1) obtenga la clave hash usando la línea de comando (Doc oficial: https://developers.facebook.com/docs/android/getting-started )

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

O

2) obtener la clave hash usando el código

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.