詹姆斯
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 -binary | 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哈希值(十六进制字符串)。SHA1: 3C:FB:ED:25:2A:48:D4:D9:E6:11:CA:B6:E2:8A:80:7C:FE:68:7D:71
- Roi首先,我想感谢Selvin!
这个答案几乎和Selvin的答案一模一样,但我还是花了3个小时才让它工作:P所以需要更详细的教程给真正的新手
如何从密钥库获取哈希密钥
keytool位置:C:\Program Files (x86)\Java\jdk1.xxx)\bin\keytool openssl位置:C:\OpenSSL-Win32\bin\OpenSSL (debug)密钥库位置:C:\Users[usernamepc].android\debug.keystore
在Windows中打开命令提示符(开始->运行->cmd)并导航到keytool位置,或者复制粘贴以下字符串,请注意您无法使用ctrl+v,但可以右键单击
cd c:\program files (x86)\java\jdk1.7.0_01\bin
当在正确的目录中时,将此字符串粘贴到命令行中: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]更改为您计算机的名称,如我的情况下为charx。此外,java jdk xxxx的目录取决于您的版本。
cmd应该显示哈希密钥。
我的调试文件的哈希键是:
h1GdQbgB8b/liCG+acmZWkgIRHA=
Eclipse解决方案(适用于像我这样的懒人)。
在Eclipse中选择任何项目,导出 - Android应用,输入你的密钥等信息,在最后一页底部你将看到 MD5:.... SHA1:....
复制SHA1字符串并粘贴到任何HEX-Base64在线转换器中(例如这个:http://tomeko.net/online_tools/hex_to_base64.php)
恭喜!您已经获得了Facebook开发者控制台所需的密钥哈希值。
出于某些原因,上述提及的解决方案对我没有起作用,但我成功生成了密钥哈希。以下是获取已签名apk[使用密钥库签名的apk]密钥哈希的10个最简单步骤:
Copy the below code into your activity [start Activity]
.This code should be contained in your activity so that you can extract the proper keyhash when your signed apk's Activity starts.
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) {
} }
Your AndroidManifest.xml
file should have the attribute android:allowBackup="true"
in its application tag.
Export your signed apk and Install the app in your mobile phone and then connect your phone in debugging mode with usb debugging on
.
Then go to sdk\platform-tools
Open command prompt and type adb devices
to see whether your device is connected or not. if device not listed then try to fix that issue before continuing to next step.
Then type adb logcat >"log.txt"
. Your cmd
screen will like hanged.
Dont Panic. Its Perfectly normal as the whole logcat is being written to log.txt
.
Run your app and hopefully when you think that the getHashKey()
function is executed then press ctrl+c
on command prompt to end log file writing.
Now the command prompt will become responsive again. Now go into
your sdk\platform-tools
dir and you will see that a log.txt file
has been created which contains logs.
Now open it in a texteditor
and search for MY_KEY_HASH:
"-----------Your keyhash-------"
FB account
or whereever you need it and then make another build in which the android:allowBackup="false"
and getHashKey()
function is
removed.我对这一切都不感兴趣。我想知道Facebook SDK实际发送了什么内容,于是我导出我的签名应用程序,并且在授权中使用临时代码来显示Facebook的error.toString()信息。这个信息给了我Facebook正在寻找的哈希密钥。然后,我把它放到我的Facebook应用程序中,差不多就完成了!
keytool -list -v -keystore keystore.jks | findstr "Alias Creation"