找到已签名应用的密钥哈希值

时间:2011-04-27 12:17:48

标签: android keystore keytool hashtag

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

詹姆斯

7 个答案:

答案 0 :(得分: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. 您应该知道密钥库的密码。对我来说是***** hehe
  6. 然后,您应该致电:

      

    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:Alias不存在

    如果哈希不起作用:

    首先,致电

      

    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

    第二次修改

    enter image description here

答案 1 :(得分:21)

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

然而,基本上大多数人都处于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可执行文件的路径,并替换&#34; Path-to-your-keystore&#34;和&#34; KeystorePassword&#34;用你的密钥库路径和密码!结果应该是创建一个文件&#34; sometext.txt&#34;在当前文件夹中,您可以在任何文本编辑器中打开它。该文本文件将列出所有密钥库别名&#39;它们各自的MD5和SHA1哈希为十六进制字符串。

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

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

希望这有助于某人;它肯定对我有用!

答案 2 :(得分:14)

首先,我要感谢Selvin!

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

如何从密钥库中获取hashKey

  • 首先从谷歌代码安装OpenSSL并将其放在C:\文件夹中 download link
  • 找到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.keystore

在Windows中打开cmd(start-&gt; run-&gt; 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”是opensssl.exe的路径,用openssl.exe的路径替换它

请确保您更改了电脑名称的[usernamepc],正如您在我的情况下所看到的那样,它是charx。此外,java jdk xxxx的目录取决于您的版本。

cmd应显示hashkey

我的调试文件的哈希键是

h1GdQbgB8b/liCG+acmZWkgIRHA=

答案 3 :(得分:9)

Eclipse的解决方案(对于像我这样的懒人)。

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

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

恭喜!您已获得Facebook Dev Console所需的密钥哈希值。

答案 4 :(得分:4)

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

  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:“-----------您的密钥显示-------”

  10. 将其复制到FB account或您需要的地方,然后进行另一个版本,其中android:allowBackup="false"getHashKey()功能是  除去。
  11. 希望这有助于每个人:)

答案 5 :(得分:3)

我不能为这一切烦恼我看到facebook sdk实际发送的是什么 使用临时代码导出我签名的应用程序以显示facebook error.toString() 在授权中,它给哈希键找我,然后把它放在我的脸谱App和宾果游戏中!

答案 6 :(得分:0)

如果您使用alies,请使用此命令查找密钥库alies

  

keytool -list -v -keystore keystore.jks | findstr&#34; Alias Creation&#34;