【问题标题】:Find the key hash for a signed app查找已签名应用的密钥哈希
【发布时间】:2011-08-13 19:42:02
【问题描述】:

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

詹姆斯

【问题讨论】:

  • 我看到了,但没用,只是说 keytool 是一个无效命令
  • so find keytool ..... with google ... > Java SDK
  • 什么意思?我真的不知道我在做什么,我只是想让它在我的手机上工作
  • 安装java SDK ...它包含名为keytool的工具,工具...到许多工具(一句话)...是的,你还应该下载openssl工具(避免下一个关于“openssl”的问题无效命令”)
  • 我创建的每个应用程序会有不同的哈希键还是相同?

标签: android keystore keytool hashtag


【解决方案1】:
  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 -binary | 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

第二次修改

【讨论】:

  • 别名是什么意思?还是没关系?
  • 查看我的编辑它应该与您在 eclipse 中用于签名应用程序的相同
  • 非常感谢。如果你在 mac 上,keytool 和 openssl 已经安装好了。 (只需使用 keytool .... | openssl ...)
  • 你的一行(坏哈希)救了我的命,让我在命令中检查我的别名,现在可以安心睡觉了,谢谢! :D
  • 我在哪里打电话?这个答案根本不完整
【解决方案2】:

对于那些仍在苦苦挣扎的人,我发现正确遵循这些步骤肯定会奏效,但第一次正确完成它们可能非常具有挑战性,实际上我发现有时在处理某些别名时指纹的 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 转换器”找到在线转换器。我一直在使用this one,因为您可以将文本文件中的字符串直接复制并粘贴到提供的框中,它只会删除分隔每个十六进制字节的冒号。

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

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

【讨论】:

  • 谢谢,这绝对有帮助。您提到 base64 转换有时无法正常工作 - 有关修复该问题以便不需要在线转换器的更多详细信息?
  • 抱歉复活了,但是我得到的SHA1是这个SHA1: 3C:FB:ED:25:2A:48:D4:D9:E6:11:CA:B6:E2:8A:80:7C:FE:68:7D:71
【解决方案3】:

首先我要感谢塞尔文!

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

如何从密钥库中获取 hashKey

  • 首先从 google 代码安装 OpenSSL 并将它放在你的 C:\ 文件夹中 download link
  • 查找 keytool 程序位置(java 中的默认值) 文件夹)
  • 查找密钥库位置(有调试默认值)

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

在 windows 中打开 cmd(start->run->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] 的 [usernamepc] 更改为您电脑的名称,在我的例子中是 charx。此外,java jdk xxxx 的目录取决于您的版本。

cmd 应该显示 hashkey

我的调试文件的哈希键是

h1GdQbgB8b/liCG+acmZWkgIRHA=

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      由于某种原因,上述解决方案对我不起作用,但我能够成功生成 keyhash。我正在编写 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. 现在在texteditor 中打开它并搜索MY_KEY_HASH:"-----------你的keyhash-------"

      10. 将其复制到您的FB account 或任何您需要的地方,然后再构建一个包含android:allowBackup="false"getHashKey() 函数的版本 已删除。

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

      【讨论】:

      • 你也可以只在android studio中监控logcat输出并搜索“MY_KEY_HASH”以节省几个步骤
      【解决方案6】:

      我无法为这一切烦恼,我看到了 facebook sdk 实际发送的内容 使用临时代码导出我已签名的应用程序以显示 facebook error.toString() 在 Authorize 中,它给出了它寻找的哈希键,然后我把它放在我的 facebook 应用程序和宾果游戏中!

      【讨论】:

      • 是的,我这样做了,除了当 facebook 失败时 logcat 显示密钥。花了大约 1 分钟。
      【解决方案7】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2017-04-25
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多