Facebook Android Generar clave hash


119

Intentando crear una aplicación de Android con integración de Facebook, llegué a la parte de los documentos donde tienes que generar un archivo de clave hash, especifica ejecutar el siguiente código

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

Cuando ejecuto esto en mi terminal, aparece un error de Keystore manipulado o la contraseña es incorrecta,

Solo quiero generar mi Key Hash

¿Alguien puede señalarme en la dirección correcta?


2
¿Estás usando la contraseña correcta?
Presidente James K. Polk

Cuando ingrese el comando en la terminal, no me da la opción de ingresar una contraseña
Scott

Intente ingresar solo el comando keytool sin los dos últimos conductos.
Presidente James K. Polk

6
Lo tengo, a veces soy tan tonto, ingrese el comando en una línea completa, no copie y pegue
Scott

Respuestas:


20

Elimine su certificado de depuración en ~ / .android / debug.keystore (en Linux y Mac OS X); el directorio es algo así como% USERHOME% /. android en Windows.

El complemento de Eclipse debería generar un nuevo certificado la próxima vez que intente crear un paquete de depuración.

Déjame saber si eso funciona.


no funcionó. eliminó el archivo debug.keystore, hizo la compilación de depuración, el archivo nunca volvió. notando más en esa carpeta actualizada.
CthulhuJon

3
Realmente no sé cómo es esta la respuesta aceptada.
Enoobong

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

281

Para generar hash de clave, debe seguir algunos pasos sencillos.

1) Descarga Openssl desde: aquí.

2) Cree una carpeta openssl en la unidad C

3) Extraiga los archivos Zip en esta carpeta openssl creada en C Drive.

4) Copie el archivo debug.keystore de la carpeta .android en mi caso (C: \ Users \ SYSTEM.android) y péguelo en la carpeta bin JDK en mi caso (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) Abra el símbolo del sistema y proporcione la ruta de la carpeta JDK Bin en mi caso (C: \ Archivos de programa \ Java \ jdk1.6.0_05 \ bin).

6) Copie el siguiente código y presione enter

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

7) Ahora debe ingresar la contraseña , Password = android.

8) Si ve en la carpeta Bin de openssl , obtendrá un archivo con el nombre de debug.txt

9) Ahora puede reiniciar el símbolo del sistema o trabajar con el símbolo del sistema existente

10) vuelva a la unidad C y proporcione la ruta de la carpeta Bin de openssl

11) copia el siguiente código y pégalo

openssl sha1 -binary debug.txt> debug_sha.txt

12) obtendrá debug_sha.txt en la carpeta bin de openssl

13) Copie nuevamente el siguiente código y péguelo

openssl base64 -in debug_sha.txt> debug_base64.txt

14) obtendrá debug_base64.txt en la carpeta bin de openssl

15) abra el archivo debug_base64.txt Aquí está su clave hash.


4
buena respuesta +1 para ti He seguido esto y obtengo el resultado deseado :)
BBdev

Recibo esto: error de keytool: java.io.IOException: Se manipuló el almacén de claves o la contraseña era incorrecta ¿Cómo puedo encontrar mi contraseña correcta?
DuyguK

Esto funcionó para mí después de 2 días de confusión sobre lo que estaba pasando. ¡Excelente trabajo!
rennoDeniro

4
@Vizzz: Buena forma de explicar la generación de claves hash. Gracias por esta publicación, espero que esta publicación le ahorre mucho tiempo a alguien.
Emran Hamza

1
Probé todos los códigos pero nunca obtuve el resultado deseado. Probé el código de Facebook, también es el mismo, solo los tres comandos en un comando, pero ejecutar tres comandos por separado proporcionó el código correcto y funcionó, la hora de búsqueda o tal vez los días de búsqueda. Gracias. Antes de esto, solo el código en la aplicación de Android daba el resultado correcto, el símbolo del sistema proporcionaba claves no válidas, ahora todo está bien. Gracias de nuevo
Diljeet

149

RESPUESTA ACTUALIZADA (Generando a través de código) Método más simple:

En mi experiencia, openssl siempre es problemático, probé el segundo método sugerido por Facebook. Y es maravilloso. Este es el mejor método para obtener la clave hash.

La segunda opción es imprimir el hash de clave enviado a Facebook y usar ese valor. Realice los siguientes cambios en el método onCreate () en su actividad principal:

    @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

Reemplace com.facebook.samples.loginhowto con su propio nombre de paquete (nombre de paquete en Manifest.xml).

Enlace oficial: https://developers.facebook.com/docs/android/login-with-facebook/ (Ver la parte inferior de la página)

ANTIGUA RESPUESTA (Generando Keyhash usando openssl)

  1. para generar la firma necesita openssl instalado en su pc. Si no tiene una descarga openssl desde aquí
  2. En C :, Crear opensslcarpeta
  3. extraiga el contenido del archivo zip openssl descargado en la opensslcarpeta de la C:unidad
  4. abrir símbolo del sistema
  5. pasar a binde openssl ie C:\openssl\binen el símbolo del sistema
  6. ejecute el siguiente comando para generar su keyhash. Mientras genera hashkey, debería pedirte una contraseña.

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

NOTA : en el código anterior, tenga en cuenta que debe proporcionar su ruta al usuario (es decir, en mi caso es C: \ Users \ Anhsirk, solo necesita cambiar esto para su cuenta de usuario.

Dar contraseña como android

. Si no solicita la contraseña, la ruta del almacén de claves es incorrecta.

Si todo funciona bien, debería darle el hashkey a continuación.

ingrese la descripción de la imagen aquí


Recibo esto: error de keytool: java.io.IOException: Se manipuló el almacén de claves o la contraseña era incorrecta ¿Cómo puedo encontrar mi contraseña correcta?
DuyguK

@DuyguK: probablemente significa que su almacén de claves ya existe. Intente borrar eso y rehacer. O una ruta incorrecta que puede haber especificado
AnhSirk Dasarp

Dios, esto me tomó horas. Muchas gracias!
Yenthe

Quiero preguntar, si el nuevo método (obtener keyhashes por código) ralentiza de alguna manera el proceso onCreate. Porque por lo que sé, cuando se crea el APK firmado, los keyhashes son diferentes. ¡Gracias por el código de todos modos! :)
marson

¿Funcionará el método más simple sin emulador pero en el dispositivo Android real?

24

La forma más sencilla de generar claves hash.

Requisito: clave SHA1

Puede obtener la clave SHA1 de su archivo de almacén de claves de dos maneras

1) Ubique su archivo de almacén de claves, abra el símbolo del sistema en esa ubicación y luego use el comando mencionado a continuación

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

y luego ingrese su contraseña, luego devolverá las claves md5, sha1 y sha256.

O

2) Mediante la ejecución de signingReport

Consulte la imagen de abajo.

ingrese la descripción de la imagen aquí

después de ejecutar el archivo, se generará la salida que contiene la clave sha1 requerida.

ingrese la descripción de la imagen aquí

Después de obtener la clave SHA1 requerida

Luego ve a

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

y pega tu clave sha1

ingrese la descripción de la imagen aquí

y finalmente obtendrás la HashKey requerida que puedes usar para aplicar en Facebook.


2
Esta respuesta es mucho más simple que las demás, ya que solo se preocupa por el resultado final. Siempre correcto. En otros casos, si el proceso de firma no se configuró correctamente, no sabremos cómo solucionarlo.
hakuna1811

1
Impresionante trabajo como el encanto Gracias amigo
Dheeraj Jaiswal

14

La clave correcta se puede obtener de la propia aplicación agregando el siguiente código para brindar el hash de clave adecuado (en el caso de Facebook SDK 3.0 en adelante, esto funciona)

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

Reemplace com.package.mypackage con el nombre de su paquete


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

12

I. Crear depuración de hash de clave para Facebook

Agregue código para imprimir el hash de la clave para 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. Crear lanzamiento de clave hash para facebook

  1. Descargar openssl-0.9.8e_X64

  2. Crear una carpeta openssl en la unidad C

  3. Extraiga los archivos Zip en la carpeta openssl

  4. Inicio -> Ejecutar: cmd (presione enter)

  5. (presione) cd C: \ Archivos de programa \ Java \ jdk1.6.0_45 \ bin. Nota: C: \ Archivos de programa \ Java \ jdk1.6.0_45 \ bin: es la ruta a la carpeta jdk en su computadora

  6. (presione) keytool -exportcert -alias gci -keystore D: \ carpeta \ keystorerelease | C: \ openssl \ bin \ openssl sha1 -binary | C: \ openssl \ bin \ openssl base64. Nota: D: \ carpeta \ keystorerelease: es la ruta a su keystorerelease

  7. Introduzca la contraseña del almacén de claves: esta es la contraseña cuando se libera el almacén de claves de registro.

    Entonces tendrás un hash clave: jDehABCDIQEDWAYz5Ow4sjsxLSw =

  8. Inicio de sesión de Facebook. Acceso para administrar aplicaciones. Pegue el hash de la clave en su aplicación en developers.facebook.com


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

9

LA SOLUCIÓN MÁS SIMPLE QUE EXISTE PARA ESTE PROBLEMA:

He tenido este problema durante dos meses. Mis hashes de clave han sido pyling hasta 9. Hoy finalmente encontré la solución simple:

PASO 1:

Instale el SDK de Facebook que descargó de la página del desarrollador de Facebook en su teléfono. No instale la aplicación de Facebook normal. Asegúrese de poder iniciar sesión en Facebook. Luego cierre la sesión.

PASO 2:

Exporta tu aplicación con tu clave de lanzamiento final como apk, como lo harías cuando la subas a la tienda de juegos.

PASO 3:

Coloque el archivo Apk en su teléfono mediante un cable USB o una memoria USB.

PASO 4:

Instale su aplicación, usando un administrador de archivos: Ejemplo

PASO 5:

Inicie su aplicación e intente iniciar sesión con Facebook. Se abrirá un cuadro de diálogo que le dirá: "la clave YOURHASHKEY no se ha encontrado en la consola de desarrollo de Facebook"

PASO 6:

Anote la clave.

PASO 7:

Ponlo en tu consola de desarrollador de Facebook y guarda. Ahora has terminado. Cualquiera que descargue su aplicación, publicada con un almacén de claves usado anteriormente, puede iniciar sesión en Facebook.

Disfrutar


solo una nota: debe poner '=' después de la clave copiada del registro
akshay7692

7

Si está lanzando, use el almacén de claves que utilizó para exportar su aplicación y no el debug.keystore.


1
Hola, he intentado usar el almacén de claves de mi aplicación para generar el keyhash, pero cada vez que intento compartir algo de mi aplicación, me da un error de que la aplicación está mal configurada para el inicio de sesión de Facebook. pero cuando intento keyhash generado a través de debug.keystore funciona. ¿Puedes ayudarme con esto?
KunalK


6

Al final :)

Aquí mi historia:

  1. Agregue este código a su actividad principal, después de configurar el diseño.

    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. ¡Cambie PROJECTNAME por el nombre de su paquete!

  3. Firme su aplicación (Herramientas de Android-> Exportar aplicación firmada)
  4. En su actividad principal donde pega el código de la opción 2, en su diseño cree TextView con id textstring
  5. descomente dos líneas, que su código de señal se establecerá en TextView 6 Wuolia, tiene su HASH, instale la aplicación en su teléfono. y compruebe su clave hash!
  6. Ahora, cuando esté visible, vaya a la aplicación de Facebook que creó y agréguela a [Key Hashes]
  7. Tenga en cuenta que el nombre de su paquete debe ser el mismo que en Facebook [Nombre del paquete] en [Key Hashes]
  8. Que tengas un buen día :)

5

Solución de una línea para generar para facebook

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

4

Para generar el hash de la clave de lanzamiento, debe seguir algunos pasos sencillos.

1) Descarga Openssl

2) Cree una carpeta openssl en la unidad C

3) Extraiga los archivos Zip en esta carpeta openssl creada en C Drive.

4) Copie el archivo debug.keystore de la carpeta .android en mi caso (C: \ Users \ SYSTEM.android) y péguelo en la carpeta bin JDK en mi caso (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) Abra el símbolo del sistema y proporcione la ruta de la carpeta JDK Bin en mi caso (C: \ Archivos de programa \ Java \ jdk1.7.0_40 \ bin).

6) Copie el siguiente código y presione enter

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 (su nombre de alias de sing apk ingrese aquí como mi signo apk alian nombre es abcd) -keystore "apth del almacén de claves generado por apk firmado ingrese aquí" | "ruta de la carpeta bin openssl ingrese aquí" sha1 - binary | "ruta de la carpeta bin openssl ingrese aquí" base64

7) Ahora debe ingresar la contraseña, Contraseña = (ingrese la contraseña del almacén de claves de firma aquí)

8) tienes un almacén de claves que se utiliza para liberar el hash de la clave de la aplicación


3

Aunque este hilo es antiguo, me gustaría compartir mi experiencia (recientemente comencé a trabajar con Facebook), que me parece clara:

  1. Descargue openssl desde el enlace de abajo: https://code.google.com/p/openssl-for-windows/downloads/list
  2. Descomprímalo en una unidad local (por ejemplo, C: \ openssl)
  3. Para obtener la clave de desarrollo para la integración de Facebook, use el siguiente comando desde la línea de comandos en Windows:

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

NOTA: reemplace la ruta de openssl.exe (en este ejemplo es "C: \ openssl \ bin \ openssl.exe") con su propia ruta de instalación.

  1. Le pedirá una contraseña, por ejemplo,

Ingrese la contraseña del almacén de claves: android

Escriba android como contraseña como se muestra arriba.

¡Eso es! Se le dará una clave de 28 caracteres. ¡Salud!

Utilice el mismo procedimiento para obtener la clave de liberación. Simplemente reemplace el comando con lo siguiente y use su alias de clave de lanzamiento.

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | "RUTA PARA openssl.exe" sha1 -binary | openssl base64


pero muestra la solicitud de contraseña, también estoy dando la contraseña firmada del almacén de claves y luego mostrando chines laungauge
Harsha

asegúrese de que la ruta esté configurada correctamente para openssl \ bin y java ... \ bin
KawaiKx

3

Generar clave hash de depuración

  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;
    }

Generar clave hash de lanzamiento

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

2

Gran publicación de blog sobre el tema.

Extrayendo el hash de clave de la clave .p12

  1. Abra Terminal o Línea de comando y navegue hasta donde está su clave .p12.
  2. Escriba: “keytool -v -list -keystore mycert.p12 -storetype pkcs12 ″ donde mycert.p12 es el nombre de archivo de su clave .p12.
  3. Introduzca la contraseña del almacén de claves (la que utilizó cuando exportó la clave .p12). 4. Copie el texto de bytes de firma de huellas dactilares sha1.
  4. Los bytes en la firma de la huella digital sha1 son necesarios para escribir el archivo "sha1.bin". Puede utilizar un editor hexadecimal para pegar los bytes que copió. Luego, guarde el archivo como "sha1.bin".
  5. Abra el terminal nuevamente y escriba: "openssl base64 -in sha1.bin -out base64.txt".
  6. El "base64.txt" resultante contendrá el Key Hash necesario para Facebook.

Gran y sencillo editor hexadecimal para mac: HexFiend

OpenSSL debe estar preinstalado en mac, y aquí está el enlace para la versión de Windows.

Enlace


Esta es una gran información para los desarrolladores de aplicaciones de Adobe AIR (Flash o Apache Flex). Y el "Nombre de la clase" para el SSO de Facebook debería serAppEntry
Alexander Farber

2

Intente pasar la contraseña de la clave y almacenarla como parte del comando

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

1

Pude realizar la tarea solicitada con algunas de las soluciones aquí, pero pensé, chico, eso es estúpido ... ¿por qué no escribir un pequeño código Java que haga esto y empaquetarlo en un Jar? ..

Un enlace para descargar el Jar

Funciona en Windows 8 ... no probé ningún otro sistema operativo.


1
Lo que no entiendo es, si me tomó un par de horas aprenderlo todo y esbozar esto, por qué ninguna de las grandes empresas ya lo ha hecho para proporcionarnos una manera fácil de obtener la información que nos piden. ???
TacB0sS

1

Hola a todos, es mi historia cómo me firman tiene clave para facebook

En primer lugar, solo tiene que copiar estos 2 métodos en su primera clase.

    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();
}

** Llame a la función getAppKeyHash () desde su método oncreate si desea un hash firmado, luego haga la compilación firmada, instale la compilación firmada y ejecute. APK firmado **


1

Si su contraseña = Android es incorrecta, coloque la contraseña de su PC para que funcione para mí.

Y para generar keyHash prueba este enlace Aquí


0

Lo único que me funciona es usar la contraseña android. ¿Por qué eso no se menciona en ninguna guía?


0

use esto en kotlin para imprimir el hash de la clave en el 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){

    }
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.