我使用以下命令为Android的Facebook应用控制台生成密钥哈希
.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64
正如Facebook developers SDK help所说
根据帮助页面和开发人员控制台,密钥散列应该是28个字符长,但是keytool生成32个字符的长密钥。
Java版本:jdk1.8.0_31操作系统:Windows 7
为android生成。
编辑
根据@ Shreyash-mashru的建议,我使用以下代码来获取keyhash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"my.package.name",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
}
但是,如果有人仍然可以帮助我理解为什么命令行工具生成32个char长键哈希而不是28 ...
遇到这个问题,对我来说,我使用Windows PowerShell并且它一直生成一个32个字符的密钥。当我切换到普通的旧cmd时,它按预期工作。
生成的哈希值为32个字符,因为有一个回车符和一个添加到结尾的换行符。要解决此问题,您可以:
删除哈希的最后5个字符,并在末尾添加"="
。例如:"1234567890abcdefghijklmnopqrstuv"
(32个字符) - > "1234567890abcdefghijklmnopq="
(28个字符)
要么:
弹出一个javascript控制台,并使用:
btoa(atob("your hash string").slice(0, -2))
其中"your hash string"
是你的32个字符哈希。
我遇到了同样的问题。它与使用我现有版本的openSSL(64位)有关。我下载了32位版本from here并将其安装到c:\ openSSL。然后该命令指向此版本的SSL,我得到了我的28个字符哈希。
keytool -exportcert -alias androiddebugkey -keystore“C:\ Users \ USERNAME.android \ debug.keystore”| “C:\ OpenSSL \ bin \ openssl”sha1 -binary |“C:\ OpenSSL \ bin \ openssl”base64
在指挥中挑战指挥!
它会询问您密码,然后您将获得哈希密钥
在powershell上尝试相同的命令不会提供正确的哈希键。
.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64
这对我来说很好。再试一遍。