我已经签署了我的应用程序并将其导出到我桌面上名为 app 的文件夹中,该文件夹是我的应用程序本身和密钥库。我如何找到可以复制到 facebook 开发人员页面的密钥哈希。我安装了openssl,但似乎无法生成密钥哈希我尝试了堆栈上的许多其他线程,但似乎没有任何帮助,谢谢
詹姆士
C:\Users\Selvin\Desktop\selvin.kp
selvin
C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
C:\OpenSSL-Win32\bin\openssl.exe
然后,您应该调用:
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 -二进制 | 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
第二次编辑
对于那些仍在苦苦挣扎的人,我发现正确遵循这些步骤肯定会奏效,但第一次正确完成它们可能非常具有挑战性,实际上我发现有时在处理某些别名时指纹的 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 转换器”找到在线转换器。我一直在使用这个,因为您可以将文本文件中的字符串复制并粘贴到提供的框中,它只会删除分隔每个十六进制字节的冒号。
最后一点(有点明显但是..)只复制和粘贴十六进制字符串而不是 SHA1: 前缀!
希望这对某人有所帮助;它当然对我有用!
首先我要感谢塞尔文!
这个答案与 Selvin 的答案几乎相同,但我仍然需要 3 个小时才能让它工作:P 所以为真正的新手提供更多教程
如何从密钥库中获取 hashKey
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.密钥库
在 windows(start->run->cmd) 中打开 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] 更改为您的 PC 的名称,正如您在我的例子中看到的那样,它是 charx。此外,java jdk xxxx 的目录取决于您的版本。
cmd 应该显示 hashkey
我的调试文件的哈希键是
h1GdQbgB8b/liCG+acmZWkgIRHA=
Eclipse 的解决方案(适合像我这样的懒人)。
选择 Eclipse 中的任何项目,导出 - Android 应用程序,输入您的密钥传递等,在底部的最后一页上,您将看到 MD5: .... SHA1:....
复制 SHA1 字符串并将其粘贴到任何 HEX-Base64 在线转换器中(例如这个:http ://tomeko.net/online_tools/hex_to_base64.php )
恭喜!您已经获得了 Facebook 开发控制台所需的密钥哈希。
由于某种原因,上述解决方案对我不起作用,但我能够成功生成密钥哈希。我正在编写 10 个最简单的步骤来获取已签名 apk [apk signed with keystore]的 keyhash :
将以下代码复制到您的. 此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) {
} }
您的AndroidManifest.xml
文件应android:allowBackup="true"
在其应用程序标记中包含该属性。
导出您签名的apk并在您的手机中安装该应用程序,然后以调试模式连接您的手机usb debugging on
。
然后去sdk\platform-tools
打开命令提示符并键入adb devices
以查看您的设备是否已连接。如果未列出设备,则在继续下一步之前尝试解决该问题。
然后键入adb logcat >"log.txt"
。你的cmd
屏幕会像上吊一样。不要恐慌。它完全正常,因为整个 logcat 都被写入log.txt
.
运行您的应用程序,并希望当您认为该getHashKey()
功能已执行时,然后按ctrl+c
命令提示符以结束日志文件写入。
现在命令提示符将再次响应。现在进入您的sdk\platform-tools
目录,您将看到已创建一个包含日志的 log.txt 文件。
现在在 a 中打开它texteditor
并搜索MY_KEY_HASH:
“---------Your keyhash-------”
FB account
或任何您需要的地方,然后制作另一个版本,其中删除了android:allowBackup="false"
andgetHashKey()
功能。希望这对每个人都有帮助:)
我无法为这一切烦恼facebook 应用程序和宾果游戏!
如果您使用您的别名,请使用此命令查找密钥库别名
keytool -list -v -keystore keystore.jks | findstr "别名创建"