123

试图创建一个与 Facebook 集成的 android 应用程序,我已经进入了文档中您必须生成密钥哈希文件的部分,它指定运行以下代码

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

当我在终端中运行它时,我收到密钥库被篡改或密码不正确的错误,

我只想生成我的密钥哈希

谁能指出我正确的方向?

4

21 回答 21

285

为了生成密钥哈希,您需要遵循一些简单的步骤。

1) 从此处下载 Openssl。

2)在C盘创建一个openssl文件夹

3) 将 Zip 文件解压到C盘中创建的openssl文件夹中。

4)在我的情况下从.android文件夹(C:\ Users \ SYSTEM.android)复制文件debug.keystore并在我的情况下粘贴到JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)

5)打开命令提示符并在我的例子中给出 JDK Bin 文件夹的路径(C:\Program Files\Java\jdk1.6.0_05\bin)。

6) 复制以下代码并回车

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

7)现在您需要输入密码,密码= android。

8) 如果你在openssl Bin 文件夹中看到,你会得到一个名为debug.txt的文件

9) 现在您可以重新启动命令提示符或使用现有的命令提示符

10)回到C盘并给出openssl Bin文件夹的路径

11)复制以下代码并粘贴

openssl sha1 -binary debug.txt > debug_sha.txt

12) 你将在 openssl bin 文件夹中获得debug_sha.txt

13)再次复制以下代码并粘贴

openssl base64 -in debug_sha.txt > debug_base64.txt

14) 你将在 openssl bin 文件夹中获得debug_base64.txt

15) 打开debug_base64.txt文件这是您的密钥哈希。

于 2012-09-13T11:35:04.487 回答
149

更新的答案(通过代码生成)更简单的方法:

根据我的经验,openssl 总是很麻烦,我尝试了 facebook 建议的第二种方法。这太棒了。这是获取哈希键的最佳方法。

第二种选择是打印出发送到 Facebook 的密钥哈希并使用该值。对主要活动中的 onCreate() 方法进行以下更改:

    @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

将 com.facebook.samples.loginhowto 替换为您自己的包名(Manifest.xml 中的包名)。

官方链接 - https://developers.facebook.com/docs/android/login-with-facebook/(见页面底部)

旧答案(使用 openssl 生成 Keyhash)

  1. 要生成签名,您需要在您的 PC 上安装 openssl。如果你没有从这里下载 openssl
  2. 在 C: 中,创建openssl文件夹
  3. 将下载的 openssl zip 文件的内容提取到驱动器中的文件openssl夹中C:
  4. 打开命令提示符
  5. 在命令提示符bin下移动到openssl ieC:\openssl\bin
  6. 运行以下命令以生成您的密钥哈希。在生成 hashkey 时,它应该询问您的密码。

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

注意:在上面的代码中请注意,您需要提供您的用户路径(即在我的情况下它是 C:\Users\Anhsirk ,您只需要为您的用户帐户更改它。

输入密码为android

. 如果它不要求输入密码,则您的密钥库路径不正确。

如果一切正常,它应该给你下面的哈希键。

在此处输入图像描述

于 2012-11-21T07:49:13.297 回答
36

生成哈希键的最简单方法。

要求: SHA1 密钥

您可以通过两种方式从您的密钥库文件中获取 SHA1 密钥

1)找到您的密钥库文件,在该位置打开命令提示符,然后使用下面提到的命令

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

然后输入您的密码,然后它将返回 md5、sha1 和 sha256 密钥。

或者

2)通过运行signingReport

参考下图。

在此处输入图像描述

运行文件后,将生成包含所需 sha1 密钥的输出。

在此处输入图像描述

获得所需的 SHA1 密钥后

然后转到

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

并粘贴您的 sha1 密钥

在此处输入图像描述

最后你会得到Required HashKey,你可以用它在facebook上申请。

于 2019-02-04T09:23:57.767 回答
20

删除 ~/.android/debug.keystore 下的调试证书(在 Linux 和 Mac OS X 上);该目录类似于 Windows 上的 %USERHOME%/.android。

当您下次尝试构建调试包时,Eclipse 插件应该会生成一个新证书。

让我知道这是否有效。

于 2011-03-15T00:02:12.537 回答
14

可以通过添加以下代码来从应用程序本身获取正确的密钥,以烘烤正确的密钥哈希(在 Facebook SDK 3.0 及更高版本的情况下,这是有效的)

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

用你的包名替换 com.package.mypackage

于 2013-08-12T13:25:05.783 回答
12

一、为facebook创建key hash debug

添加代码以打印出 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) {

    }

二、为 facebook 创建密钥散列版本

  1. 下载openssl-0.9.8e_X64

  2. 在 C 盘创建一个 openssl 文件夹

  3. 将 Zip 文件解压到 openssl 文件夹

  4. 开始 -> 运行:cmd(按回车键)

  5. (按)cd C:\Program Files\Java\jdk1.6.0_45\bin。注意:C:\Program Files\Java\jdk1.6.0_45\bin: 是您计算机中 jdk 文件夹的路径

  6. (按)keytool -exportcert -alias gci -keystore D:\folder\keystorerelease | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl base64。注意:D:\folder\keystorerelease: 是您的 keystorerelease 的路径

  7. 输入密钥库密码:这是您注册密钥库释放时的密码。

    然后你将有一个密钥哈希:jDehABCDIQEDWAYz5Ow4sjsxLSw=

  8. 登录脸书。访问管理应用程序。将密钥哈希粘贴到您在 developers.facebook.com 上的应用

于 2013-09-06T03:50:36.910 回答
9

针对这个问题的最简单的解决方案:

我有这个问题两个月了。我的密钥哈希值一直高达 9。今天我终于找到了简单的解决方案:

第1步:

在手机上安装从 facebook 开发者页面下载的 facebook sdk。不要安装普通的 facebook 应用程序。确保您可以登录 facebook。然后登出。

第2步:

使用您的最终发布密钥将您的应用导出为 apk,就像您将其上传到 Playstore 时一样。

第 3 步:

通过 USB 数据线或 USB 棒将 Apk 文件放在手机上。

第4步:

使用文件管理器安装您的应用程序:示例

第 5 步:

启动您的应用程序并尝试使用 facebook 登录。将打开一个对话框并告诉您:“在 facebook 开发人员控制台中找不到密钥 YOURHASHKEY”

第 6 步:

写下钥匙。

第 7 步:

将其放入您的 facebook 开发者控制台并保存。现在你完成了。下载您的应用程序并使用之前使用的密钥库发布的任何人都可以登录 facebook。

享受

于 2015-01-29T21:07:37.917 回答
7

如果您要发布,请使用您用于导出应用程序的密钥库,而不是 debug.keystore。

于 2012-04-20T07:39:54.213 回答
6

调试证书的密码是android而不是android

于 2011-07-03T18:27:41.637 回答
6

终于 :)

这是我的故事:

  1. 设置布局后,将此代码添加到您的主要活动中。

    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. 将 PROJECTNAME 更改为您的包名称!

  3. 为您的应用签名(Android 工具->导出签名的应用程序)
  4. 在您粘贴来自 2 选项的代码的主要活动中,在您的布局中创建带有 id textstring 的 TextView
  5. 取消注释两行,您的签名代码将设置为 TextView 6 Wuolia,您有您的 HASH ,在您的手机上安装应用程序!!!并检查您的哈希键!
  6. 现在,当它可见时,转到您创建的 facebook 应用程序并将其添加到 [Key Hashes]
  7. 请注意,您的包名称应与 [Key Hashes] 下的 facebook [Package Name] 相同
  8. 祝你今天过得愉快 :)
于 2014-02-03T21:39:54.207 回答
5

为 facebook 生成的一条线解决方案

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
于 2016-11-03T13:33:15.010 回答
4

为了生成发布密钥哈希,您需要遵循一些简单的步骤。

1) 下载OpenSSL

2)在C盘创建一个openssl文件夹

3) 将 Zip 文件解压到 C 盘中创建的 openssl 文件夹中。

4)在我的情况下从.android文件夹(C:\ Users \ SYSTEM.android)复制文件debug.keystore并在我的情况下粘贴到JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) 打开命令提示符并在我的例子中给出 JDK Bin 文件夹的路径(C:\Program Files\Java\jdk1.7.0_40\bin)。

6) 复制以下代码并回车

keytool -exportcert -alias abcd-keystore D:\Projects\MyAppFolder\keystore.txt | C:\openssl\bin\openssl sha1 - 二进制 | C:\openssl\bin\openssl base64 ex - keytool -exportcert -alias(你的 sing apk 别名在此处输入,就像我的签名 apk 别名是 abcd )-keystore "已签名 apk 生成的密钥库 apth 在此处输入" | “openssl bin 文件夹路径在此处输入” sha1 - 二进制 | “openssl bin 文件夹路径在此处输入”base64

7)现在你需要输入密码,Password =(在这里输入你的签名密钥库密码)

8)你有用于发布应用程序密钥哈希的密钥库

于 2014-07-03T06:01:43.933 回答
3

尽管这个线程很旧,但我想分享我的经验(最近开始使用 facebook),这在我看来是直截了当的:

  1. 从以下链接下载 openssl: https ://code.google.com/p/openssl-for-windows/downloads/list
  2. 将其解压缩到本地驱动器(例如,C:\openssl)
  3. 要获取 facebook 集成的 Development 密钥,请在 windows 的命令行中使用以下命令:

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

注意!:请将 openssl.exe 的路径(在本例中为“C:\openssl\bin\openssl.exe”)替换为您自己的安装路径。

  1. 它将提示输入密码,例如,

输入密钥库密码:android

输入 android 作为密码,如上所示。

就是这样!您将获得一个 28 个字符长的密钥。干杯!

使用相同的过程来获取 Release 密钥。只需将命令替换为以下内容并使用您的发布密钥别名。

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | “openssl.exe 的路径” sha1 -binary | openssl base64

于 2015-08-25T18:28:48.840 回答
3

生成调试哈希键

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

生成发布哈希键

 keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64
于 2018-01-11T11:15:09.443 回答
2

关于这个主题的精彩博客文章

从 .p12 密钥中提取密钥哈希

  1. 打开终端或命令行并导航到 .p12 密钥所在的位置。
  2. 输入:“keytool -v -list -keystore mycert.p12 -storetype pkcs12” 其中 mycert.p12 是您的 .p12 密钥的文件名。
  3. 输入密钥库密码(导出 .p12 密钥时使用的密码)。4. 复制 sha1 指纹签名字节文本。
  4. sha1 指纹签名处的字节是写入“sha1.bin”文件所必需的。您可以使用十六进制编辑器粘贴您复制的字节。然后,将文件另存为“sha1.bin”。
  5. 再次打开终端并输入:“openssl base64 -in sha1.bin -out base64.txt”。
  6. 生成的“base64.txt”将包含 Facebook 所需的密钥哈希。

适用于 mac 的伟大而简单的十六进制编辑器:HexFiend

Mac 上应该预装 OpenSSL,这里是 Windows 版本的链接。

关联

于 2013-10-03T13:13:44.407 回答
2

尝试传递密钥的密码并将其存储为命令的一部分

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
于 2016-08-10T18:58:31.800 回答
1

我可以使用这里的一些解决方案来执行所要求的任务,但我想,这孩子真傻……为什么不编写一个小的 Java 代码来执行此操作并将其打包到一个 Jar 中,所以我做到了。 ..

下载Jar的链接

适用于 Windows 8... 没有尝试任何其他操作系统。

于 2013-10-29T08:30:03.413 回答
1

大家好,这是我的故事,我是如何签名的,有 Facebook 的密钥

首先,您只需在第一堂课中复制这两种方法

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

**如果您想要签名哈希,请从您的 oncreate 方法调用函数 getAppKeyHash() 然后进行签名构建安装签名构建并运行您将在对话框中获得哈希密钥然后只需记下它并在 facebook 开发帐户上更新它并评论该函数并制作另一个已签名的 APK **

于 2015-11-04T19:15:42.687 回答
1

如果您的密码 = android 错误,那么将您的电脑密码输入它对我有用。

并为生成 keyHash 试试这个链接Here

于 2016-02-16T04:25:13.590 回答
0

唯一对我有用的是使用密码android。为什么那里的任何指南中都没有提到这一点?

于 2017-08-13T09:13:47.923 回答
0

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

    }
于 2018-01-19T10:41:08.223 回答