Facebook Android Gerar Hash de Chaves

119

Tentando criar um aplicativo Android com integração com o Facebook, cheguei à parte dos documentos em que você precisa gerar um arquivo hash chave, que especifica a execução do código a seguir

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

Quando executo isso no meu terminal, recebo um erro para o Keystore violado ou a senha estava incorreta,

Eu só quero gerar meu Key Hash

Alguém pode me apontar na direção certa?

Scott
fonte
2
Você está usando a senha correta?
Presidente James K. Polk
Ao digitar o comando no terminal ele não me dar a opção de digitar uma senha
Scott
Tente digitar apenas o comando keytool sem os dois últimos pipes.
Presidente James K. Polk
6
Eu tenho isso, eu sou uma boba, às vezes, digite o comando em uma linha inteira, copiar e colar não faça
Scott

Respostas:

20

Exclua seu certificado de depuração em ~ / .android / debug.keystore (no Linux e Mac OS X); o diretório é algo como% USERHOME% /. android no Windows.

O plug-in do Eclipse deve gerar um novo certificado na próxima tentativa de compilar um pacote de depuração.

Deixe-me saber se isso funciona.

allthenutsandbolts
fonte
não funcionou. excluiu o arquivo debug.keystore, fez a compilação de depuração, o arquivo nunca voltou. observando mais nessa pasta atualizada.
CthulhuJon
3
Eu realmente não sei como esta é a resposta aceita?
Enoobong
Gere HashKey para o modo de depuração e liberação usando isso. stackoverflow.com/questions/7506392/…
Naeem Ibrahim
281

Para gerar o hash da chave, você precisa seguir algumas etapas fáceis.

1) Faça o download do Openssl de: aqui.

2) Crie uma pasta openssl na unidade C

3) Extraia arquivos Zip para esta pasta openssl criada no C Drive.

4) Copie o arquivo debug.keystore da pasta .android no meu caso (C: \ Users \ SYSTEM.android) e cole na pasta bin do JDK no meu caso (C: \ Arquivos de programas \ Java \ jdk1.6.0_05 \ bin)

5) Abra o prompt de comando e forneça o caminho da pasta JDK Bin no meu caso (C: \ Arquivos de Programas \ Java \ jdk1.6.0_05 \ bin).

6) Copie o seguinte código e pressione enter

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

7) Agora você precisa digitar a senha , Senha = android.

8) Se você vir na pasta bin openssl , receberá um arquivo com o nome de debug.txt

9) Agora você pode reiniciar o prompt de comando ou trabalhar com o prompt de comando existente

10) volte para a unidade C e especifique o caminho da pasta openssl Bin

11) copie o seguinte código e cole

openssl sha1 - binário debug.txt> debug_sha.txt

12) você receberá debug_sha.txt na pasta openssl bin

13) Copie novamente o código a seguir e cole

openssl base64 -em debug_sha.txt> debug_base64.txt

14) você obterá debug_base64.txt na pasta openssl bin

15) abra o arquivo debug_base64.txt Aqui está o seu hash da chave.

Vijay Arora
fonte
4
boa resposta +1 para você eu tenho seguido isso e obter o resultado desejado :)
BBdev
Estou recebendo o seguinte erro: keytool: java.io.IOException: Keystore foi adulterado ou a senha estava incorreta.Como posso encontrar minha senha correta?
DuyguK
Isso funcionou para mim após 2 dias de confusão com o que estava acontecendo. Trabalho brilhante!
RennoDeniro
4
@Vizzz: Ótima maneira de explicar a geração de hash de chave. Obrigado por este post, espero que este post economize muito tempo para alguém.
Emran Hamza
1
Eu tentei todos os códigos, mas nunca obtive a saída desejada. Eu tentei o código do facebook também é o mesmo, apenas os três comandos em um comando, mas executar três comandos separadamente deu o código certo e funcionou, hora de pesquisa ou talvez dias de pesquisa. Obrigado. Antes disso, apenas o código no aplicativo Android estava dando o resultado certo, o prompt de comando fornecia chaves inválidas, agora está tudo bem. Obrigado novamente
Diljeet 23/03
149

RESPOSTA ATUALIZADA (Gerando através do código) Método mais simples:

Na minha experiência, openssl sempre sendo problemático, tentei o segundo método sugerido pelo facebook. E é maravilhoso. Este é o melhor método para obter a chave de hash.

A segunda opção é imprimir o hash da chave enviado ao Facebook e usar esse valor. Faça as seguintes alterações no método onCreate () em sua atividade 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

Substitua com.facebook.samples.loginhowto pelo seu próprio nome de pacote (nome do pacote em Manifest.xml).

Link oficial - https://developers.facebook.com/docs/android/login-with-facebook/ (Veja o final da página)

RESPOSTA ANTIGA (Gerando Keyhash usando o openssl)

  1. Para gerar assinatura, você precisa do openssl instalado no seu PC. Se você não tiver um openssl de download a partir daqui
  2. Em C openssl:, Criar pasta
  3. extrair o conteúdo do arquivo zip openssl baixado para a opensslpasta na C:unidade
  4. abrir prompt de comando
  5. mover a binde openssl por exemplo C:\openssl\binem linha de comandos
  6. execute o seguinte comando para gerar seu keyhash. Ao gerar o hashkey, ele deve solicitar sua senha.

    keytool -exportcert -alias androiddebugkey -keystore "C: \ Usuários \ Anhsirk.android \ debug.keystore" | openssl sha1 -binário | openssl base64

NOTA : no código acima, observe que você precisa indicar o caminho para o usuário (ou seja, no meu caso, é C: \ Users \ Anhsirk, basta alterar isso na sua conta de usuário.

Dê a senha como android

. Se ele não solicitar a senha, seu caminho do keystore estará incorreto.

Se tudo funcionar bem, deve fornecer a hashkey abaixo.

insira a descrição da imagem aqui

AnhSirk Dasarp
fonte
Estou recebendo o seguinte erro: keytool: java.io.IOException: Keystore foi adulterado ou a senha estava incorreta.Como posso encontrar minha senha correta?
DuyguK
@DuyguK - provavelmente significa que seu keystore já existe. Tente excluir isso e refazer. Ou um caminho errado, você pode ter especificado
AnhSirk Dasarp
Deus, isso me levou horas. Muito obrigado!
Yenthe
Quero perguntar, se o novo método (obter keyhashes por código) diminui de alguma forma o processo onCreate. Porque pelo que eu sei, quando o APK assinado é criado, os keyhashes são diferentes. Obrigado pelo código de qualquer maneira :)!
marson
o método mais simples funcionará sem emulador, mas no dispositivo Android real?
24

Maneira mais simples de gerar chave de hash.

Requisito: Chave SHA1

Você pode obter a Chave SHA1 do seu arquivo keystore de duas maneiras

1) Localize o arquivo keystore, abra o prompt de comando nesse local e use o comando abaixo mencionado

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

e, em seguida, digite sua senha e retornará as teclas md5, sha1 e sha256.

OU

2) Executando signatureReport

Consulte a imagem abaixo.

insira a descrição da imagem aqui

Depois de executar o arquivo, sua saída será gerada contendo a chave sha1 necessária.

insira a descrição da imagem aqui

Depois de obter a chave SHA1 necessária

Então vá para

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

e cole sua chave sha1

insira a descrição da imagem aqui

e, finalmente, você receberá o HashKey obrigatório, que poderá ser usado para aplicar no facebook.

Vicky Salunkhe
fonte
2
Essa resposta é muito mais simples que as outras, pois se preocupa apenas com a saída final. Sempre correto. Em outros casos, se o processo de assinatura for configurado incorretamente, não saberemos como corrigir.
Hakuna1811
1
Awesome Work like charm Obrigado amigo
Dheeraj Jaiswal 25/19
14

A chave certa pode ser obtida no próprio aplicativo adicionando o código a seguir para definir o hash da chave adequado (no caso do Facebook SDK 3.0 em diante, isso 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) {
}

Substitua com.package.mypackage pelo nome do seu pacote

Tigerden
fonte
Gere HashKey para o modo de depuração e liberação usando isso. stackoverflow.com/questions/7506392/…
Naeem Ibrahim
12

I. Criar depuração de hash chave para o facebook

Adicione código para imprimir o hash da chave do 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 Criar liberação de hash chave para o facebook

  1. Openssl-0.9.8e_X64 download grátis

  2. Crie uma pasta openssl na unidade C

  3. Extrair arquivos Zip para a pasta openssl

  4. Iniciar -> Executar: cmd (pressione enter)

  5. (pressione) cd C: \ Arquivos de programas \ Java \ jdk1.6.0_45 \ bin. Nota: C: \ Arquivos de programas \ Java \ jdk1.6.0_45 \ bin: é o caminho para a pasta jdk no seu computador

  6. (pressione) keytool -exportcert -alias gci -keystore D: \ folder \ keystorerelease | C: \ openssl \ bin \ openssl sha1 -binário | C: \ openssl \ bin \ openssl base64. Nota: D: \ folder \ keystorerelease: é o caminho para o seu keystorerelease

  7. Digite a senha do keystore: Essa é a senha quando o seu registro é liberado.

    Então você terá um hash da chave: jDehABCDIQEDWAYz5Ow4sjsxLSw =

  8. Entrar no Facebook. Acesso para gerenciar aplicativos. Cole o hash da chave no seu aplicativo em developers.facebook.com

Anh Duy
fonte
Gere HashKey para o modo de depuração e liberação usando isso. stackoverflow.com/questions/7506392/…
Naeem Ibrahim
9

SOLUÇÃO MAIS SIMPLES PARA ESTE PROBLEMA:

Eu tenho esse problema há dois meses. Meus hashes principais aumentaram até 9. Hoje, finalmente encontrei a solução simples:

PASSO 1:

Instale o facebook sdk que você baixou da página de desenvolvedor do facebook no seu telefone. Não instale o aplicativo normal do facebook. Certifique-se de que você pode entrar no facebook. Então saia.

PASSO 2:

Exporte seu aplicativo com sua chave de lançamento final como um apk, como faria ao enviá-lo para o playstore.

ETAPA 3:

Coloque o arquivo Apk no seu telefone via cabo USB ou pendrive.

PASSO 4:

Instale seu aplicativo usando um gerenciador de arquivos: Exemplo

PASSO 5:

Inicie seu aplicativo e tente fazer login com o facebook. Uma caixa de diálogo será aberta e informará: "a chave YOURHASHKEY não foi encontrada no console do desenvolvedor do facebook"

PASSO 6:

Anote a chave.

PASSO 7:

Coloque-o no console do desenvolvedor do facebook e salve. Agora você está pronto. Qualquer pessoa que faça o download do seu aplicativo, publicada com o keystore usado anteriormente, pode fazer login no facebook.

Aproveitar

Sakramento
fonte
apenas uma observação: você precisa colocar '=' após a chave copiada do log
akshay7692
7

Se você estiver liberando, use o keystore usado para exportar seu aplicativo e não o debug.keystore.

trgraglia
fonte
1
Oi, eu tentei usar o keystore do meu aplicativo para gerar o keyhash, mas sempre que tento compartilhar algo do meu aplicativo, ocorre um erro de que o aplicativo está configurado incorretamente para o login do Facebook. mas quando eu tento keyhash gerado através de debug.keystore ele funciona. você pode me ajudar com isso?
KunalK
6

A senha do certificado de depuração é android e não Android

Fernando Gallego
fonte
6

Finalmente :)

Aqui está a minha história:

  1. Adicione esse código à sua atividade principal, depois de definir o 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. Mude PROJECTNAME para o nome do seu pacote!

  3. Assine o seu aplicativo (Ferramentas Android-> Exportar aplicativo assinado)
  4. Na sua atividade principal, onde você cola o código da opção 2, no seu layout, crie o TextView com id texttring
  5. descomente duas linhas, que seu código de sinal seria definido como TextView 6 Wuolia, você tem seu HASH, instale o aplicativo no seu telefone !!! e verifique sua chave de hash!
  6. Agora, quando estiver visível, acesse o aplicativo do facebook que você criou e adicione-o a [Key Hashes]
  7. Observe que o nome do seu pacote deve ser o mesmo do facebook [Nome do pacote] em [Key Hashes]
  8. Tenha um bom dia :)
Vasilij
fonte
5

Solução de uma linha para gerar para o facebook

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

Para gerar o hash da chave de liberação, você precisa seguir algumas etapas fáceis.

1) Faça o download do Openssl

2) Crie uma pasta openssl na unidade C

3) Extraia arquivos Zip para esta pasta openssl criada no C Drive.

4) Copie o arquivo debug.keystore da pasta .android no meu caso (C: \ Users \ SYSTEM.android) e cole na pasta bin do JDK no meu caso (C: \ Arquivos de programas \ Java \ jdk1.6.0_05 \ bin)

5) Abra o prompt de comando e forneça o caminho da pasta JDK Bin no meu caso (C: \ Arquivos de Programas \ Java \ jdk1.7.0_40 \ bin).

6) Copie o seguinte código e pressione enter

keytool -exportcert -alias abcd-keystore D: \ Projetos \ MyAppFolder \ keystore.txt | C: \ openssl \ bin \ openssl sha1 - binário | C: \ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias (o nome do seu apelido apk para entrar aqui como meu signo apk o nome do alian é abcd) -keystore "keystore gerado apk apk apth enter aqui" | "caminho da pasta bin openssl entre aqui" sha1 - binário | "caminho da pasta openssl bin entre aqui" base64

7) Agora você precisa digitar a senha, Senha = (digite sua senha de armazenamento de chaves aqui)

8) você tem o keystore usado para liberar o hash da chave do aplicativo

Vijay Rajput
fonte
3

Mesmo que esse tópico seja antigo, gostaria de compartilhar minha experiência (recentemente comecei a trabalhar com o facebook), o que me parece correto:

  1. Faça o download do openssl no link abaixo: https://code.google.com/p/openssl-for-windows/downloads/list
  2. Descompacte-o em uma unidade local (por exemplo, C: \ openssl)
  3. Para obter a chave de desenvolvimento para a integração do facebook, use o seguinte comando na linha de comando do Windows:

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

NOTA !: substitua o caminho do openssl.exe (neste exemplo, é "C: \ openssl \ bin \ openssl.exe") pelo seu próprio caminho de instalação.

  1. Ele solicitará a senha, por exemplo,

Digite a senha do keystore: android

Digite android como senha, como mostrado acima.

É isso aí! Você receberá uma chave de 28 caracteres. Felicidades!

Use o mesmo procedimento para obter a chave Release. Apenas substitua o comando pelo seguinte e use o alias da chave de liberação.

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | "PATH FOR openssl.exe" sha1 -binário | openssl base64

Mahbubul Syeed
fonte
mas mostrando pedindo senha am dando senha de armazenamento de chaves também assinou e, em seguida, mostrando chines laungauge
Harsha
garantir que o caminho está correctamente definido para OpenSSL \ bin e java ... \ bin
KawaiKx
3

Gerar chave de hash de depuração

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

Gerar chave de hash de liberação

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

Ótimo post sobre o assunto

Extraindo o hash de chave da chave .p12

  1. Abra Terminal ou linha de comando e navegue até onde está sua chave .p12.
  2. Digite: “keytool -v -list -keystore mycert.p12 -storetype pkcs12 ″ em que mycert.p12 é o nome do arquivo da sua chave .p12.
  3. Digite a senha do keystore (a que você usou quando exportou a chave .p12). 4) Copie o texto dos bytes da assinatura da impressão digital sha1.
  4. Os bytes na assinatura de impressão digital sha1 são necessários para gravar o arquivo “sha1.bin”. Você pode usar um editor hexadecimal para colar os bytes copiados. Depois, salve o arquivo como "sha1.bin".
  5. Abra o terminal novamente e digite: “openssl base64 -em sha1.bin -out base64.txt”.
  6. O "base64.txt" resultante conterá o Key Hash necessário para o Facebook.

Ótimo e simples editor hexadecimal para mac: HexFiend

O OpenSSL deve estar pré-instalado no mac, e aqui está o link para a versão do Windows.

Ligação

Thyselius
fonte
Esta é uma ótima informação para desenvolvedores de aplicativos Adobe AIR (Flash ou Apache Flex). E o "Nome da classe" para o SSO do Facebook deve ser #AppEntry
Alexander Farber
2

Tente passar a senha da chave e armazene como parte do comando

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

Eu era capaz de executar a tarefa solicitada com algumas das soluções aqui, mas pensei comigo mesmo, garoto que é estúpido ... por que não escrever um pequeno código Java que faz isso e empacotá-lo em um Jar, foi o que fiz. ..

Um link para baixar o Jar

Funciona no Windows 8 ... não tentou nenhum outro sistema operacional.

TacB0sS
fonte
1
O que eu não entendo é que, se levei algumas horas para aprender tudo e esboçar isso, por que nenhuma das grandes empresas já fez isso para nos fornecer uma maneira fácil de obter as informações solicitadas por nós ???
TacB0sS
1

Oi pessoal, é a minha história, como eu assinei, tem uma chave para o facebook

Antes de tudo, basta copiar estes 2 métodos na sua primeira aula

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

** Chame a função getAppKeyHash () do seu método oncreate, se você quiser o hash assinado, faça a instalação assinada, instale a construção assinada e execute. APK assinado **

Prashant Maheshwari Andro
fonte
1

Se a sua senha = android estiver errada, coloque a senha do seu PC que funciona para mim.

E para gerar keyHash tente este link aqui

Arpit Patel
fonte
0

A única coisa que funciona para mim é usar a senha android. Por que isso não é mencionado em nenhum guia por aí?

Remi Sture
fonte
0

use isso no kotlin para hash da chave de impressão no log

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

    }
Prashant Jajal
fonte