Java Facebook Android SDK的密钥哈希
我不知道如何获取使用Facebook Android SDK所需的密钥哈希。我发现我可以通过以下命令使用Java Facebook Android SDK的密钥哈希,java,android,keystore,keytool,Java,Android,Keystore,Keytool,我不知道如何获取使用Facebook Android SDK所需的密钥哈希。我发现我可以通过以下命令使用keytool: keytool -exportcert -alias [alias] -keystore [keystore] | openssl sha1 -binary | openssl enc -a -e 唯一的问题是我不知道在哪里插入它,我尝试通过命令窗口(win7)打开文件keytool.exe。您必须打开命令提示窗口。进入开始->运行并键入“cmd”,然后按回车键。然后
keytool
:
keytool -exportcert -alias [alias]
-keystore [keystore] | openssl sha1 -binary | openssl enc -a -e
唯一的问题是我不知道在哪里插入它,我尝试通过命令窗口(win7)打开文件keytool.exe。您必须打开命令提示窗口。进入开始->运行并键入“cmd”,然后按回车键。然后您必须导航到
keytool
所在的文件夹(除非它在您的路径中),然后键入该命令
也就是说,假设该命令是针对windows而不是linux的。您可以从安装Open SSL,这将使您的命令工作起来更轻松
keytool.exe -list -alias androiddebugkey -keystore debug.keystore -v
这将为您提供所需的指纹,而无需安装openssl
e、 g
我创建了一个批处理脚本facebookkeydebug.bat,它返回所需的Facebook密钥散列。只需编辑脚本,设置正确的路径、密钥库名称并运行它
:: Getting Android key hash for Facebook app on Windows
:: Requirement: OpenSSL for Windows (http://code.google.com/p/openssl-for-windows/downloads/list)
:: Usage: set paths and run facebookkeydebug.bat
@echo Exporting keystore cert
keytool -exportcert -alias androiddebugkey -keystore C:\Users\myusername\.android\debug.keystore -storepass android -keypass android > debug.keystore.bin
@echo Converting to sha1
C:\PROGRAMS\openssl-0.9.8k_X64\bin\openssl sha1 -binary debug.keystore.bin > debug.keystore.sha1
@echo Converting to base64
C:\PROGRAMS\openssl-0.9.8k_X64\bin\openssl base64 -in debug.keystore.sha1 -out debug.keystore.base64
@echo Done, Android hash key for Facebook app is:
C:\PROGRAMS\openssl-0.9.8k_X64\bin\openssl base64 -in debug.keystore.sha1
@pause
编辑:我发布了一个repo,其中包含一些批处理脚本,用于在Windows上签名和获取证书密钥:
您可以使用下面的代码获取哈希键:
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
Log.e("name not found", e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
}
参考:
这是一个如何从密钥库获取密钥哈希的示例:
首先,我们需要获得以下路径:
Java路径:
C:\ProgramFiles\Java\jdk1.6.0\U 35\jre\bin
打开SSL路径:
C:\OpenSSL-Win32\bin
(安装地点:)
密钥库路径:
C:\Data\ANDROID\KEYSTORE\
2) 然后转到命令行并键入:
cd[Java路径]
3) 然后键入:
keytool.exe-exportcert-别名[别名]-密钥库[密钥库
路径]\debug.keystore |[打开SSL路径]\openssl sha1-二进制|[打开
SSL路径]\bin\openssl base64
4) 必须输入密钥库的密码,然后才有与Android密钥库相关的散列密钥
这是如何为Facebook
设置密钥散列的文档:
最好的方法是使用以下代码生成密钥哈希:
public static void generateKeyHash(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
"com.example.user2.testapp",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}
调用此方法一次并生成密钥散列,即可使用C:\Program Files\Java\jdk1.6.0\U 22\bin\keytool.exe-exportcert-alias“typeYouraliasname”-密钥库的密钥库位置| C:\OpenSSL-Win32\bin\OpenSSL sha1-binary | C:\OpenSSL-Win32\bin\OpenSSL base64好的!我犯了一个愚蠢的错误,我从keytool所在的文件夹中导航。因此,我得到了很多jibberish的回报,没有机会进入openssl。这也是我安装的一个程序吗?我认为Keytool是和JavaJDK一起安装的。但我不确定它是否在你的路径上,我不在windows上工作。另外,我也不确定默认情况下是否安装了openssl。同样,这可能是linux指令。你确定那是文件上唯一说的吗?它没有说明您需要安装什么,etcI将自己导航到keytool文件,第一个命令起作用。但是,在使用openssl时,我遇到了一个错误,说明找不到该程序。说明如下:在“单点登录”下是的,默认情况下Windows上没有安装openssl,facebook sdk教程没有提到这一点。我已经生成了密钥散列,但不知道该密钥放在哪里,你能指导我吗?我在Ubuntu上运行android studio。对其他人来说:如果你把keytool和OpenSSL文件放在同一个文件夹中会更简单。是的,只要把OpenSSL存档的内容复制到你的jdk1.x.0文件夹+1中就行了。我现在可以用Openssl运行这个命令了。我已经生成了密钥散列,但是不知道该把密钥放在哪里,你能指导我吗?非常感谢!!节省了我很多时间:)我已经生成了密钥散列,但不知道该密钥放在哪里,你能指导我吗?但这里我们需要的是密钥散列而不是指纹。我已经生成了密钥散列,但不知道该密钥放在哪里,你能指导我吗?这一个不同于密码为“android”的keytool代码生成的密钥。为什么?我已经生成了密钥散列,但不知道该密钥放在哪里,你能指导我吗?我已经生成了密钥散列,但不知道该密钥放在哪里,你能指导我吗?我正在Ubuntu上运行android studio。请访问facebook开发者网站,按照我写的使用密码“android”(不带引号)进行调试哈希。我已经生成了密钥哈希,但不知道该密钥放在哪里,你能指导我吗?我在Ubuntu上运行android studio。您好@Apurva这是文档,我已经更新了答案。我已经生成了密钥散列,但不知道该将密钥放在哪里,您能指导我吗?我在Ubuntu上运行android studio。我已经生成了密钥散列,但不知道该把密钥放在哪里,你能指导我吗?我正在Ubuntu上运行android studio。首先让我知道您生成密钥散列的目的是什么?我想在我的应用程序中提供使用Facebook登录的支持,现在我发现我需要将该密钥放在Facebook开发者网站上。:)好的,首先去注册应用程序,然后使用上面的代码生成keyhash,然后粘贴keyhash
public static void generateKeyHash(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
"com.example.user2.testapp",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}