23

我已经签署了我的应用程序并将其导出到我桌面上名为 app 的文件夹中,该文件夹是我的应用程序本身和密钥库。我如何找到可以复制到 facebook 开发人员页面的密钥哈希。我安装了openssl,但似乎无法生成密钥哈希我尝试了堆栈上的许多其他线程,但似乎没有任何帮助,谢谢

詹姆士

4

7 回答 7

49
  1. 您应该知道您的密钥库文件在哪里。对我来说是C:\Users\Selvin\Desktop\selvin.kp
  2. 您应该知道您在密钥库中的别名。对我来说是selvin
  3. 您应该知道 keytool 的路径。C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
  4. 您应该知道 openssl 的路径。C:\OpenSSL-Win32\bin\openssl.exe
  5. 您应该知道密钥库的密码。对我来说是 ***** 呵呵

然后,您应该调用:

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe" -exportcert -alias selvin -keystore c:\users\selvin\desktop\selvin.kp | C:\OpenSSL-Win32\bin\openssl sha1 -二进制 | C:\OpenSSL-Win32\bin\openssl base64

用正确的路径和别名替换我的路径和别名。

然后你应该看到:

输入密钥库密码:

输入您的密码,您应该会得到如下信息:NfhDlIH7XWJzUZRjL+pZySrMX1Q=

已编辑NfgDlIG7XWJzUZRUL+bZySrMX1Q=<- 是一个糟糕的哈希。或者你很幸运,你的钥匙发生了同样的碰撞

错误:keytool 错误:java.lang.Exception:别名不存在

如果哈希不起作用:

首先,打电话

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe" -exportcert -alias selvin -keystore c:\users\selvin\desktop\selvin.kp

输入密码并读取错误

如果您不记得您的别名keytool error: java.lang.Exception: Alias <selvinn> does not exist,我使用 selvinn 来显示错误。

有关所有条目/别名的列表:

C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe -list -keystore c:\users\selvin\desktop\selvin.kp

第二次编辑

在此处输入图像描述

于 2011-04-27T13:52:06.983 回答
22

对于那些仍在苦苦挣扎的人,我发现正确遵循这些步骤肯定会奏效,但第一次正确完成它们可能非常具有挑战性,实际上我发现有时在处理某些别名时指纹的 base64 转换不起作用(由于某种原因,哈希被截断)。我已经编写了各种批处理文件,这些文件将已经提到的大部分指令放在一起,所以我不排除存在问题。

然而,基本上大多数人都在 openssl 阶段陷入困境(要么找不到它,不知道如何使用它,要么 Windows 管道没有正确地将 SHA1 导出的输出链接到 base64 转换输入)。

为了解决这个问题,您可以使用一种可能更容易理解和理解的替代方法。本质上,facebook API 想要的是用于指纹识别您的 APK 的 SHA1 哈希的 base64 表示(编码)。为此,您只需列出密钥库:

"C:\Program Files\Java\JRE6\Bin\keytool.exe" -list -v -keystore "Path-to-your-keystore" -storepass "KeystorePassword" > somefile.txt

显然,您需要根据自己的设置更改 keytool 可执行文件的路径,并将“Path-to-your-keystore”和“KeystorePassword”替换为您的密钥库路径和密码!结果应该是在当前文件夹中创建一个文件“sometext.txt”,然后您可以在任何文本编辑器中打开该文件。文本文件将列出所有密钥库别名以及它们各自的 MD5 和 SHA1 哈希作为十六进制字符串。

现在只需找到用于签署您的 APK 的别名,复制 SHA1 哈希,并使用任何在线十六进制到 base64 转换器将其转换为 facebook 需要的 base64 编码格式。您可以通过谷歌搜索“在线十六进制到 base64 转换器”找到在线转换器。我一直在使用这个,因为您可以将文本文件中的字符串复制并粘贴到提供的框中,它只会删除分隔每个十六进制字节的冒号。

最后一点(有点明显但是..)只复制和粘贴十六进制字符串而不是 SHA1: 前缀!

希望这对某人有所帮助;它当然对我有用!

于 2012-09-05T10:31:35.017 回答
14

首先我要感谢塞尔文!

这个答案与 Selvin 的答案几乎相同,但我仍然需要 3 个小时才能让它工作:P 所以为真正的新手提供更多教程

如何从密钥库中获取 hashKey

  • 首先从谷歌代码安装 OpenSSL 并将其放入您的 C:\ 文件夹 下载链接
  • 查找 keytool 程序位置(默认在 java 文件夹中)
  • 查找密钥库位置(有调试默认值)

location keytool C:\Program Files (x86)\Java\jdk1.xxx)\bin\keytool location openssl C:\OpenSSL-Win32\bin\OpenSSL location (debug)keystore C:\Users[usernamepc].android\debug.密钥库

在 windows(start->run->cmd) 中打开 cmd 并导航到 keytool 位置或复制粘贴以下字符串,注意不能使用 ctrl+v 但鼠标右键

cd c:\program files (x86)\java\jdk1.7.0_01\bin

在正确的目录中将此字符串粘贴到 cmd 行中时:

keytool.exe -exportcert -alias androiddebugkey -keystore c:\users\charx\.android\debug.keystore | C:\OpenSSL-Win32\bin\openssl sha1 -binary | C:\OpenSSL-Win32\bin\openssl base64

"C:\OpenSSL-Win32\bin\openssl" 是 openssl.exe 的路径,用你的 openssl.exe 的路径替换它

确保将您的 [usernamepc] 更改为您的 PC 的名称,正如您在我的例子中看到的那样,它是 charx。此外,java jdk xxxx 的目录取决于您的版本。

cmd 应该显示 hashkey

我的调试文件的哈希键是

h1GdQbgB8b/liCG+acmZWkgIRHA=
于 2012-01-19T08:58:34.340 回答
9

Eclipse 的解决方案(适合像我这样的懒人)。

选择 Eclipse 中的任何项目,导出 - Android 应用程序,输入您的密钥传递等,在底部的最后一页上,您将看到 MD5: .... SHA1:....

复制 SHA1 字符串并将其粘贴到任何 HEX-Base64 在线转换器中(例如这个:http ://tomeko.net/online_tools/hex_to_base64.php )

恭喜!您已经获得了 Facebook 开发控制台所需的密钥哈希。

于 2014-06-10T13:27:43.343 回答
4

由于某种原因,上述解决方案对我不起作用,但我能够成功生成密钥哈希。我正在编写 10 个最简单的步骤来获取已签名 apk [apk signed with keystore]的 keyhash :

  1. 将以下代码复制到您的. 此activity [start Activity]代码应包含在您的活动中,以便您可以在签名的 apk 活动开始时提取正确的密钥哈希。

    private void getHashKey() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.e("MY_KEY_HASH:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {
    } catch (NoSuchAlgorithmException e) {
    } }
    
  2. 您的AndroidManifest.xml文件应android:allowBackup="true"在其应用程序标记中包含该属性。

  3. 导出您签名的apk并在您的手机中安装该应用程序,然后以调试模式连接您的手机usb debugging on

  4. 然后去sdk\platform-tools

  5. 打开命令提示符并键入adb devices以查看您的设备是否已连接。如果未列出设备,则在继续下一步之前尝试解决该问题。

  6. 然后键入adb logcat >"log.txt"。你的cmd屏幕会像上吊一样。不要恐慌。它完全正常,因为整个 logcat 都被写入log.txt.

  7. 运行您的应用程序,并希望当您认为该getHashKey() 功能已执行时,然后按ctrl+c命令提示符以结束日志文件写入。

  8. 现在命令提示符将再次响应。现在进入您的sdk\platform-tools目录,您将看到已创建一个包含日志的 log.txt 文件。

  9. 现在在 a 中打开它texteditor并搜索MY_KEY_HASH:“---------Your keyhash-------”

  10. 将其复制到您FB account或任何您需要的地方,然后制作另一个版本,其中删除了android:allowBackup="false"andgetHashKey()功能。

希望这对每个人都有帮助:)

于 2014-07-26T17:47:43.020 回答
3

我无法为这一切烦恼facebook 应用程序和宾果游戏!

于 2012-07-10T20:35:36.463 回答
0

如果您使用您的别名,请使用此命令查找密钥库别名

keytool -list -v -keystore keystore.jks | findstr "别名创建"

于 2017-10-17T14:19:09.430 回答