首页 文章

Android-Facebook应用程序的密钥哈希

提问于
浏览
208

我正在开发一款Android应用程序,我希望在其中整合Facebook发布功能 . 我下载了Facebook-Android SDK,我在那里得到了readme.md(文本文件),其中提到了生成Android的密钥哈希 . 我该如何生成它?

28 回答

  • 3
    • 只需打开您的主要活动文件并创建以下功能:
    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运行应用程序,这将为您的应用程序生成一个哈希键 .

    • 现在,打开log cat并使用“KeyHash”进行搜索并复制哈希键 .

    • 您生成哈希键,您可以删除此功能 .

  • 3

    以下是步骤 -

    • Google code下载openssl(如果你有64位机器,你必须download openssl-0.9.8e X64不是最新版本)

    • 解压缩它 . 在C:/中创建一个文件夹-OpenSSL,并在此复制提取的代码 .

    • 检测debug.keystore文件路径 . 如果你没找到,那么在C:/中搜索并在下一步中使用命令中的Path .

    • 检测您的keytool.exe路径并转到该dir / in命令提示符并在1行中运行此命令 -

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

    • 它会要求输入密码,放android

    • 就是这样 . 你会得到一个密钥哈希

    欲了解更多信息visit here

  • 28

    您可以在任何活动中使用此代码 . 它会将logkey记录在logcat中,这是调试密钥 . 这很简单,比使用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());
    }
    

    您可以在知道密钥后删除代码;)

  • 0

    我为Windows和Mac OS X创建了一个小工具 . 只需输入密钥存储文件,然后获取哈希密钥 .

    如果需要默认的debug.keystore文件,请使用默认别名和密码 . 否则,请使用您自己的密钥库文件和值 .

    检查一下,download the Windows versiondownload the Mac OS X version(Dev-Host有时可能会关闭......所以如果链接坏了,PM我和我会解决它) .

    我希望能帮到你们......

    Dec 31, 2014 - EDIT: 将主机更改为AFH . 如果链接断开,请告诉我

    Nov 21, 2013 - EDIT:

    根据用户的要求,我添加了默认密钥库位置和 DONATE button. Feel free to use it ,如果我帮助过你的话 . :)

    Screen shot

    Screen shot 2

  • 4

    目前Facebook's Android Tutorial中的说明在 Windows 下无效 . 他们的示例显示了如何将keytool输出传递给openssl,但如果在Windows下尝试此操作,则输出由于某种原因无效 . 我发现我必须使用中间文件才能使其正常工作 . 以下是适合我的步骤:

    首先从Google下载openssl for Windows .

    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
    

    运行这些命令后,有效散列将存储在base64.txt文件中 . 将其复制并粘贴到Facebook上的应用设置中 .

  • 1

    1)创建一个密钥来签署您的应用程序,并记住别名 .

    2)安装OpenSSL .

    3)将OpenSSL的bin文件夹放在路径中 .

    4)按照FB-Android-SDK page上"Setup Single Sign-On"下提到的步骤操作,生成哈希密钥 . 确保您输入正确的别名和密钥库文件名 .

    5)在Facebok上创建一个应用程序,然后在“移动设备”选项卡下输入此哈希密钥 .

  • 5

    这是the official page of Facebook给出的:

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

    让我把这个命令分解成片段 .

    • 寻找 "keytool.exe" . 您可以在C:驱动器上搜索它 . 您可以在 "java jdk""java jre" 中找到它 . 如果您已安装多个版本,请选择任何版本 .

    • 打开CMD提示并转到上面找到 "keytool.exe" 的目录 .

    剪辑“exe`”并粘贴Facebook页面上提供的上述命令 .

    • 输入此信息时会出现错误,因为输入输出命令中无法识别OpenSSL . 解决方案:从OpenSSL下载"Openssl"(如果您有64位计算机,则必须download openssl-0.9.8e X64) . 将其解压缩并保存在任何地方......我将其保存在 OpenSSl 文件夹中的C:驱动器上

    • 在管道后面的两个地方用“|”替换上面命令中的openssl,其中您在OpenSSL中遇到“C:\ OpenSSL \ bin \ openssl”错误 .

    • 如果提示输入密码,请输入 android .

    你会得到你的哈希键 . 有关更多步骤,请再次参阅Facebook页面 .

  • 0

    将此代码添加到您的活动的 onCreate ,它将在您的logCat中的 KeyHash 标记下打印哈希

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

    您可以为您的帐户添加多个hashkey,因此如果您在debug don't forget to run this again in release mode 中运行 .

  • 58

    要获取Android密钥哈希码,请按照下列步骤操作:

    • 下载OpenSSL for Windows here

    • 现在解压缩到C盘

    • 打开CMD提示

    • 类型 cd C:\Program Files\Java\jdk1.6.0_26\bin

    • 然后只键入 keytool -export -alias myAlias -keystore C:\Users\ 您的用户名 \.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e

    • 完成

  • 128

    我发现最简单的解决方案是:

    • 打开Log Cat

    • 使用Android SDK尝试访问Facebook

    • 在日志中查找如下所示的行:

    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
    
    • 复制“abcdefgHIJKLMN OPqrstuvwzyz”并将其粘贴到Facebook Android Key Hash区域 .
  • 2

    我已经通过这种方式为 Linux OSWindows OS 做了:

    Linux:

    • 下载Openssl

    • 打开终端

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

    请根据您的要求更改 Alias NameKeystore with it's path .

    终奌站将 ask 用于 Password 的Keystore . 你必须 provide password 为相同的 Keystore .

    所以最后你会得到 Release Hashkey .

    Windows:

    Release Hashkey 的步骤:

    • 下载Openssl(从here下载),我已经下载了 64 bit 操作系统,你可以找到更多here

    • 仅将下载的zip文件解压缩到C:\驱动器

    • 打开命令提示符

    • 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

    请根据您的要求更改 Alias NameKeystore with it's path .

    注意:

    **Please put your details where I have marked between ** .

    终端将 askPassword 的Keystore . 你必须 provide password 为相同的 Keystore .

    所以最后你会得到 Release Hashkey .

    Done

  • 9
    • 在这里下载openSSL for windows you can find 64bit and 32bit here

    • 解压缩下载的文件

    • 在C盘中创建文件夹名称openSSL

    • 将所有提取的项目复制到openSSL文件夹中(bin,include,lib,openssl.cnf)

    • 获取android调试密钥库,默认位置将是

    C:\ Users \ username \ .android \ debug.keystore

    • 现在获取命令提示符并粘贴此代码

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

    • 点击进入,您将获得28位数的键码
  • 4

    您需要通过keytool创建一个密钥库,用于android的签名应用程序,如Android Site中描述的过程,然后您必须安装cygwin,然后您需要从google code安装openssl然后只需执行以下命令,您将获得哈希密钥android,然后将该哈希键放入您创建的Facebook应用程序中 . 然后你可以通过Android应用程序访问Facebook应用程序发布墙("publish_stream")可能是一个例子 .

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

    您需要从cygwin执行上述命令 .

  • 0

    下载openSSL -> 安装它 -> 它通常会安装在 C:\OpenSSL

    然后打开cmd并输入

    cd../../Program Files (Enter)
    
    java (Enter)
    
    dir (Enter)
    
    cd jdk1.6.0_17 (varies with jdk versions) (Enter)
    

    检查jdk版本转到 C:/program files/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)
    

    它会询问你的密码是android .

  • 11

    关于facebook developer site的官方文件:

    @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) {
    
        }
    
  • 0
    keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64
    

    这对我有用......

    脚步:

    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
    
  • 0

    For Linux

    开放式终端:

    For Debug Build

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

    你会发现 debug.keystore 从".android"文件夹中复制它并粘贴在桌面上并运行上面的命令

    For release Build

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

    NOTE : Make sure In Both case it must ask for password. If it does not asks for password that means something is wrong in command.

  • 220

    For an Android application

    此代码用于获取Android应用程序中用于Facebook集成的哈希键 . 我测试了所有设备并且它正在运行 . 只更改此代码的包名称:

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

    要生成发布密钥的哈希值,请在Mac或Windows上运行以下命令,替换您的发布密钥别名和密钥库的路径 .

    在Windows上,使用:

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

    此命令应生成28个字符串 . 请记住 COPYPASTE 此释放密钥哈希到您的Facebook App ID的Android设置中 .

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

    参考:https://developers.facebook.com/docs/android/getting-started#release-key-hashhttp://note.taable.com

  • 6

    就_1193387_在类似问题上我发现这对我有用:

    • 将想要了解哈希的 apkname.apk 文件复制到'Java \ jdk1.7.0_79 \ bin'文件夹

    • 运行此命令 keytool -list -printcert -jarfile apkname.apk

    • 复制 SHA1 值并使用此site进行转换

    • 使用转换后的Keyhash值(例如zaHqo1xcaPv6CmvlWnJk3SaNRIQ =)

  • 296

    最简单的解决方案:

    • 不要添加哈希键,实现其他所有功能

    • 按下facebook登录时,您将收到错误消息说"Invalid key hash. The key hash " xxx " does not match any stored key. ..."

    • 打开facebook app仪表板并添加哈希"xxx="("xxx"哈希来自错误"="标志)

  • 5

    最好的方法是使用以下代码:

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

    但我对于为Facebook应用程序生成HashKey没有简单的工具这一事实感到非常沮丧 . 每次我必须使用Openssl和Keytool或使用代码从签名中获取哈希值...

    所以我写了一个简单的KeyGenTool,它将为你工作:-> KeyGenTool on Google Play <-

    请享用 :)

  • 47

    我做了一个小错误,应该记住 . 如果您使用的是密钥库,那么请提供别名,而不是androiddebugkey ...

    我解决了我的问题 . 现在,如果我的设备中安装了Facebook,那么我的应用程序仍在获取Facebook登录集成的数据 . 只关心你的哈希键 .

    请看下面 .

    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
    

    然后按Enter键 - 它将询问您密码,然后输入您的密钥库密码,而不是Android .

    凉 .

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

    首先,要在本地计算机上生成密钥哈希,请针对Android调试密钥库运行Java的keytool实用程序(应该在控制台的路径上) . 默认情况下,这是您家中的.android目录) .

    在ubuntu上,它在我的电脑里徘徊

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

    对于那些不知道如何编码的人来说,AivarsDa在Google Play上的关键生成工具是最简单的解决方案 . 只需从中获取哈希键并复制到Facebook应用程序设置 . 密钥工具上的共享使我的应用程序在我的手机上崩溃,所以我只需在记事本中手动输入它并将其复制到fb . 经过几天的挫折之后,终于过了这一步

  • 6

    在c盘和openssl文件夹中保持打开ssl后使用此命令 .

    keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.android\debug.keystore" | openssl sha1 -binary | openssl base64
    
  • 6

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

相关问题