find已签名应用的关键哈希

我已经签署了我的应用程序,并将其导出到桌面上的一个文件夹中,这个文件夹中的应用程序就是我的应用程序本身和密钥库。 我如何find我可以复制到Facebook开发者页面的关键散列。 我有openssl安装,但似乎不能产生密钥哈希ive试图在堆栈上的许多其他线程,似乎没有任何帮助,谢谢

詹姆士

Solutions Collecting From Web of "find已签名应用的关键哈希"

  1. 你应该知道你的keystore文件在哪里。 对我来说是C:\Users\Selvin\Desktop\selvin.kp
  2. 你应该知道你在密钥库中的别名。 对我来说是selvin
  3. 你应该知道keytool的path。 C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
  4. 你应该知道openssl的path。 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

用适当的replace我的path和别名。

那么你应该看到:

input密钥库密码:

input你的密码,你应该得到这样的: 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

input密码并阅读错误

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

有关您所有input/别名的列表:

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

第二次编辑

在这里输入图像说明

对于那些还在挣扎的人来说,我发现这些步骤正确的遵循肯定会起作用,但是第一次正确使用这些步骤会非常困难,而且实际上我发现有时在处理某些别名时指纹的base64转换不起作用(由于某种原因哈希会被截断)。 我已经写了各种batch file,这些文件已经提到了大多数已经提到的说明,所以我不排除在那里的问题。

然而,基本上大多数人在openssl阶段(无法find它,不知道如何使用它,或者Windowspipe道不能正确链接从SHA1导出到base64转换input的输出)。

为了解决这个问题,你可以使用另一种方法,这个方法可能更容易理解。 本质上,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,并将您的密钥库path和密码replace为“您的密钥库path”和“密钥库密码”! 结果应该是在当前文件夹中创build一个文件“sometext.txt”,然后在任何文本编辑器中打开该文件。 文本文件将列出所有密钥库别名及其各自的MD5和SHA1散列为hexstring。

现在只需find用于签名APK的别名,复制SHA1哈希,并使用任何联机hex到base64转换器将其转换为Facebook所需的base64编码格式。 你可以find一个在线转换器search“在线hex到base64转换器”。 我一直在使用这个,因为你可以直接从文本文件中复制和粘贴string到提供的框中,它只会删除分隔每个hex字节的冒号。

最后一点(稍微明显,但..)只复制和粘贴hexstring,而不是SHA1:前缀!

希望这有助于某人; 它当然适合我!

首先我要感谢Selvin!

这个答案和Selvin的答案几乎是一样的,但是我花了3个小时才开始工作:

如何从keystore获取hashKey

  • 首先从谷歌代码安装OpenSSL,并把它放在你的C:\文件夹下载链接
  • findkeytool程序的位置(在java文件夹中默认)
  • findkeystore的位置(有一个debugging默认值)

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

在Windows中打开cmd(开始 – >运行 – > CMD),并导航到keytool位置或复制粘贴下面的string,请注意,您不能使用CTRL + V,但右键单击

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

在正确的目录中粘贴这个string的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的path,将其replace为openssl.exe的path

确保你改变你的[usernamepc]你的电脑的名字,你可以看到我的情况是charx。 此外,java jdk xxxx的目录取决于你的版本。

cmd应显示hashkey

我的debugging文件的散列键是

 h1GdQbgB8b/liCG+acmZWkgIRHA= 

Eclipse的解决scheme(对于像我这样的懒惰的人)。

在Eclipse中select任何项目,导出 – Android应用程序,input密钥通过等,在底部的最后一页,你将看到MD5:…. SHA1:….

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

恭喜! 你有Facebook开发控制台所需的关键哈希。

我不能困扰所有这一切,我看到什么Facebook SDK实际上是通过导出我的签名的应用程序与临时代码到位显示Facebook的error.toString()在授权给它的哈希键find我然后把这个在我的Facebook的应用程序和宾果!

上面提到的解决scheme由于某种原因对我不起作用,但是我能够成功地生成keyhash。 我正在写10个最简单的步骤来获得你签名的apk的keyhash [apk用keystore签名]

  1. 将下面的代码复制到你的activity [start Activity] 。这个代码应该包含在你的活动中,这样你就可以在签名的apk活动开始时提取正确的keyhash。

     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,然后在手机上安装应用程序,然后在debugging模式下使用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文件已经被创build。

  9. 现在打开一个texteditor并searchMY_KEY_HASH: “———– Your keyhash ——-”

  10. 把它复制到你的FB account或者你需要的时候,然后再进行另一个构build,其中android:allowBackup="false"getHashKey()函数被删除。

希望这有助于大家:)

如果你使用你的alies,使用这个命令findkeystore alies

keytool -list -v -keystore keystore.jks | findstr“别名创作”