2011-04-27 128 views
21

我已签署我的应用程序并将其导出到桌面上的一个文件夹中,此文件夹中的应用程序是我的应用程序本身和密钥存储区。我如何找到可以复制到Facebook开发者页面的关键散列。我已经OpenSSL的安装,但不能似乎产生密钥散列香港专业教育学院尝试了许多叠其他线程并没有一个似乎帮助,感谢找到已签名应用程序的密钥哈希值

詹姆斯

+0

香港专业教育学院看到,但它没有工作,只是说:密钥工具是一个无效的命令 – James 2011-04-27 12:50:56

+0

所以找到keytool .....与谷歌...> Java SDK – Selvin 2011-04-27 12:57:00

+0

你是什么意思?我真的不知道我在做什么,我只是想在我的手机上工作 – James 2011-04-27 13:03:00

回答

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 -binary | C:\OpenSSL-Win32\bin\openssl base64

更换我的路径和别名适当的。

那么你应该看到:

Enter keystore password:

输入您的密码,你应该得到这样的事情:NfhDlIH7XWJzUZRjL+pZySrMX1Q=

EDITEDNfgDlIG7XWJzUZRUL+bZySrMX1Q= < - 是一个糟糕的哈希值。或者你有这么幸运,你的钥匙由相同的碰撞为

error:keytool error: java.lang.Exception: Alias does not exist

如果哈希不工作:

首先,拨打

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

+2

我爱你<3 :) – James 2011-04-27 14:01:11

+1

别名是什么意思?或者没有关系? – James 2011-04-27 14:09:26

+0

看到我的编辑它应该是相同的,你用于签署的应用程序在日食 – Selvin 2011-04-27 14:11:47

14

首先,我要感谢Selvin!

这个答案几乎是相同的Selvin的答案,但它还是花了我3个小时得到它的工作:P所以对于真正的newbs

多一点的教程如何从密钥库获得hashKey

  • 首先从谷歌代码安装OpenSSL和把它放在你的C:\文件夹 download link
  • 找到keytool程序位置(在Java中 文件夹默认)
  • 查找密钥存储位置(存在调试默认值)

位置keytool的C:\ Program Files文件(x86)的\的Java \ jdk1.xxx)\ BIN \密钥工具 位置OpenSSL的C:\的OpenSSL的Win32 \ BIN \ OpenSSL的 位置(调试)密钥库C:\用户[usernamepc] .android \ debug.keystore

打开cmd在窗口(开始 - >运行> CMD)和导航到密钥工具位置 或复制粘贴以下字符串,请注意,您不能使用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

为我调试文件

哈希关键是

​​3210
3

我想不出这一切我看到了Facebook SDK实际上是由 发送导出我的签署应用程序与临时困扰代码在授权中显示facebook error.toString() ,它给出了它寻找的散列键然后把它放在我的Facebook App和宾果游戏中!

+0

是的,我做到了这一点,除了当facebook失败时logcat显示关键字。花了大约1分钟的时间做。 – 2012-08-08 09:38:05

21

对于那些仍在苦苦挣扎的人,我发现这些步骤在正确使用后肯定会起作用,但他们对于第一次正确使用可能相当具有挑战性,实际上我发现有时在处理某些别名时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的可执行文件,并替换“路径到您的-密钥库”和“KeystorePassword”与您的密钥库路径和密码!结果应该是在当前文件夹中创建一个文件“sometext.txt”,然后可以在任何文本编辑器中打开该文件。该文本文件将列出所有密钥库别名及其各自的MD5和SHA1哈希值作为十六进制字符串。

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

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

希望这可以帮助别人;它当然适合我!

+0

谢谢,这绝对有帮助。您提到base64转换有时无法正常工作 - 有关修复该问题的更多细节以便不需要在线转换器? – LocalPCGuy 2014-01-27 04:23:59

+0

对不起复活,但我得到的SHA1是这个 'SHA1:3C:FB:ED:25:2A:48:D4:D9:E6:11:CA:B6:E2:8A:80:7C:FE :68:7D:71' – Roi 2016-06-10 11:19:49

9

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

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

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

恭喜!您已获得Facebook开发控制台所需的关键哈希值。

+0

这个方法真的对我有效。 – 2014-09-22 15:14:20

3

上述方案并没有为我工作,出于某种原因,但我能够成功产生keyhash。我写了10最容易的一步得到keyhash您签署的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打开它,然后搜索“-----------你keyhash -------”

  10. 拷贝到您的FB account或徘徊无论你需要然后再进行另一次构建,其中android:allowBackup="false"getHashKey()功能被删除,其中 已删除。

希望这有助于大家:)

+0

您也可以在android studio中监视logcat输出,并搜索“MY_KEY_HASH”以节省几步 – 2017-01-12 22:12:06

+0

很好的答案。为我工作。 – 2017-08-29 09:10:28

0

如果您使用alies使用这个命令来查找密钥库alies

keytool -list -v -keystore keystore.jks | findstr "Alias Creation"

相关问题