Android-Facebook应用程序的关键哈希

我正在开发一个Android应用程序,我想在其中集成Facebook发布function。 我下载了Facebook-Android SDK,并在那里获得了readme.md(文本文件),其中提到了为Android生成密钥散列。 我如何生成它?

这里是步骤 –

  1. 谷歌代码下载openssl(如果你有一个64位的机器,你必须下载openssl-0.9.8e X64不是最新版本)

  2. 提取它。 在C:/创build一个文件夹 – OpenSSL,并在这里复制提取的代码。

  3. 检测debug.keystore文件path。 如果你没有find,那么在C:/中进行search,然后在下一步的命令中使用Path。

  4. 检测您的keytool.exepath,然后转到该命令提示符下的dir /,并以1行方式运行此命令

    $ keytool -exportcert -alias androiddebugkey -keystore“C:\ Documents and Settings \ Administrator.android \ debug.keystore”| “C:\ OpenSSL \ bin \ openssl”sha1 -binary |“C:\ OpenSSL \ bin \ openssl”base64

    • 它会要求input密码,把android
    • 就这样。 你会得到一个密钥哈希

欲了解更多信息请访问

您可以在任何活动中使用此代码。 它会将hashkeylogging在debugging密钥logcat中。 这很容易,比使用SSL更容易一些。

PackageInfo info; try { info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md; md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String something = new String(Base64.encode(md.digest(), 0)); //String something = new String(Base64.encodeBytes(md.digest())); Log.e("hash key", something); } } catch (NameNotFoundException e1) { Log.e("name not found", e1.toString()); } catch (NoSuchAlgorithmException e) { Log.e("no such an algorithm", e.toString()); } catch (Exception e) { Log.e("exception", e.toString()); } 

知道密钥后,可以删除代码;)

我为Windows和Mac OS X创build了一个小工具。只需input密钥存储文件并获取散列键即可。

如果您需要默认的debug.keystore文件,请使用默认的别名和密码。 否则,使用您自己的密钥库文件和值。

检查出来, 下载Windows版本或下载Mac OS X版本 (Dev-Host有时候可能会closures…所以如果链接被破坏,PM我和我会修复它)。

我希望能帮助你们

2014年12月31日 – 编辑:主机更改为AFH。 请让我知道,如果链接被破坏

2013年11月21日 – 编辑:

随着用户请求,我添加了一个默认的密钥库位置和一个捐赠button。 随意使用它,如果我帮你。 🙂

屏幕截图屏幕截图2

目前Facebook的Android教程中的说明在Windows下无法正常工作。 他们的例子显示了如何pipe道keytool输出到openssl,但如果你在Windows下尝试这个输出是由于某种原因无效。 我发现我不得不使用中间文件才能正常工作。 以下是适合我的步骤:

首先从Google下载适用于Windows的openssl 。

 C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt 

运行这些命令之后,有效散列存储在文件base64.txt中。 复制并粘贴到您在Facebook上的应用程序设置。

这是在Facebook的官方网页上给出的 :

  keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 

让我把这个命令分解成碎片。

  1. "keytool.exe" 。 您可以在C:驱动器上search。 你可以在"java jdk""java jre"find它。 如果您安装了多个版本,请select任意版本。

  2. 打开一个CMD提示符并转到上面find"keytool.exe"目录。

    剪下“exe”,粘贴上面的Facebook页面上提供的命令。

  3. input时出现错误,input输出命令中无法识别OpenSSL。 解决scheme:从OpenSSL下载“Openssl”(如果您有64位的计算机,则必须下载openssl-0.9.8e X64 )。 解压缩并保存在任何地方…我将它保存在OpenSSl文件夹中的C:驱动器上

  4. 在pipe道“|”后面的两个地方,将上面得到OpenSSL错误的命令中的opensslreplace为“C:\ OpenSSL \ bin \ openssl”。

  5. 如果提示input密码,请inputandroid

你会得到你的哈希键。 有关更多步骤,请再次参阅Facebook页面。

将此代码添加到您的活动的onCreate ,它将在您的logCat中的KeyHash标记下打印散列

 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) { } catch (NoSuchAlgorithmException e) { } 

您可以为您的帐户添加多个哈希键,所以如果您正在运行debugging,不要忘记在发布模式下再次运行

要获取Android密钥哈希码,请按照下列步骤操作:

  1. 在这里下载OpenSSL for Windows
  2. 现在解压到C盘
  3. 打开一个CMD提示符
  4. 键入cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. 然后键入keytool -export -alias myAlias -keystore C:\Users\你的用户名\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e \.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. 完成

我find的最简单的解决scheme是:

  • 打开日志猫
  • 尝试使用Android SDK访问Facebook
  • 在日志中查找如下所示的行:

     04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your application settings. Check your application settings at http://www.facebook.com/developers 
  • 复制“abcdefgHIJKLMN + OPqrstuvwzyz”并粘贴到Facebook的Android密钥哈希区域。

对于Linux操作系统Windows操作系统,我已经这样做了:

Linux的:

  • 下载Openssl
  • 打开terminal
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

请按照您的要求更改别名密钥库

terminal会要求 密码存储的密码 。 您必须为相同的密钥库 提供密码

所以最后你会得到释放哈希键

视窗:

释放 哈希键的步骤:

  • 下载Openssl(从这里下载),我已经下载了64位操作系统,你可以在这里find更多
  • 仅将下载的zip文件解压缩到C:\驱动器
  • 打开命令提示符
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

请按照您的要求更改别名密钥库

注意:

请把你的细节放在**之间标记的位置。

terminal会要求 密码存储的密码 。 您必须为相同的密钥库 提供密码

所以最后你会得到释放哈希键

完成

  • 在这里你可以find64位和32位的 Windows下载openSSL

  • 提取下载的文件

  • 在C驱动器中创build文件夹名称openSSL
  • 将所有提取的项目复制到openSSL文件夹(bin,include,lib,openssl.cnf)
  • 得到androiddebugging密钥库,默认位置将会是

C:\ Users \用户名\ .android \ debug.keystore

  • 现在得到你的命令提示符并粘贴这个代码

keytool -exportcert -alias androiddebugkey -keystore C:\ Users \ username.android \ debug.keystore | “C:\ openSSL \ bin \ openssl”sha1 -binary | “C:\ openSSL \ bin \ openssl”base64

  • 按回车键,你将得到28位数的键码

下载openSSL – >安装它– >它通常会安装在C:\ OpenSSL中

然后打开cmd并键入

 cd../../Program Files (Enter) java (Enter) dir (Enter) cd jdk1.6.0_17 (varies with jdk versions) (Enter) 

要检查jdk版本,请转到C:/ program files / java / jdk_version

 cd bin (enter) keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter) 

它会问你的密码这是Android。

1)创build一个密钥来签署你的应用程序,并记住别名。

2)安装OpenSSL。

3)把OpenSSL的bin文件夹放在你的path中。

4)按照FB-Android-SDK 页面上的“设置单一login”中提到的步骤,生成你的哈希密钥。 确保你input了正确的别名和密钥库文件名。

5)在Facebok上创build一个应用程序,在移动设备选项卡下,input这个哈希键。

你需要通过Android的签名应用程序的keytool来创build一个keystore,就像Android站点中描述的过程一样,然后你必须安装cygwin,然后你需要从google代码安装openssl,然后执行下面的命令,你将得到hash键为Android,然后把该哈希键到您创build的Facebook应用程序。 然后,您可以通过Android应用程序访问Facebook应用程序发布墙(“publish_stream”)可能是一个例子。

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

你需要从cygwin执行上面的命令。

Facebook开发人员网站上的官方文档:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Add code to print out the key hash try { PackageInfo info = getPackageManager().getPackageInfo( "com.facebook.samples.hellofacebook", 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) { } catch (NoSuchAlgorithmException e) { } 
  1. 只需打开你的主要活动文件,创build下面提到的function:

      try { PackageInfo info = getPackageManager().getPackageInfo( "your.application.package.name", 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) { } 

1.1运行你的应用程序,这将为你的应用程序生成一个哈希键。

  1. 现在,打开日志猫并用“KeyHash”search并复制散列键。

  2. 你生成哈希键,你可以删除这个function。

 keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

这对我工作…

脚步:

 1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin 2) Download OpenSSL from google 3) paste this with changing your paths - keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 .................... give proper debug.keystore path and openSSL path .. 4) Finley it may be ask u password .. so give password -> android ... 5) you will get 28 characters that will be your has key 

对于Linux

开放terminal:

对于debugging版本

 keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 

你会发现从“.android”文件夹debug.keystore复制它并粘贴在桌面上运行上面的命令

用于发布构build

 keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64 

注意:确保在两种情况下都必须要求input密码。 如果它不要求input密码,那就意味着命令有问题。

要生成释放密钥的散列,请在Mac或Windows上运行以下命令,replace您的释放密钥别名和密钥存储的path。

在Windows上,使用:

 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

这个命令应该生成一个28个string。 请记住, 复制粘贴这个释放密钥哈希到您的Facebook应用程序ID的Android设置。

图片:fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

请参考: https : //developers.facebook.com/docs/android/getting-started#release-key-hash和http://note.taable.com

对于Android应用程序

这段代码是用来获取您的Android应用程序中的哈希键用于Facebook集成。 我testing了所有设备,它的工作。 只更改此代码的包名称:

 private void facebookHashKey() { try { PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashCode = Base64.encodeToString(md.digest(), Base64.DEFAULT); System.out.println("Print the hashKey for Facebook :"+hashCode); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } } 

最简单的解决scheme:

  1. 不要添加散列键,执行一切
  2. 当按下facebookloginbutton时,你会看到一个错误:“无效的密钥散列,密钥散列”xxx“与任何存储的密钥都不匹配……”
  3. 打开Facebook应用程序仪表板并添加散列“xxx =”(来自错误+“=”符号的“xxx”散列)

最好的方法是使用下面的代码:

 private void getHashKey(String pkgName) { try { PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashKey = Base64.encodeBytes(md.digest()); _hashKey_et.setText(hashKey); Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey); } } catch (NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } 

但是,我感到非常沮丧的事实是,没有简单的工具来生成Facebook应用程序的HashKey。 每次我必须玩Openssl和Keytool或使用代码从签名获取散列…

所以我写了一个简单的KeyGenTool,它可以帮助你: – > Google Play上的KeyGenTool < –

请享用 :)

 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import android.os.Bundle; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.text.Editable; import android.util.Base64; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { Button btn; EditText et; PackageInfo info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.button1); et=(EditText)findViewById(R.id.editText1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md; md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String something = new String(Base64.encode(md.digest(), 0)); //String something = new String(Base64.encodeBytes(md.digest())); et.setText("" + something); Log.e("hash key", something); } } catch (NameNotFoundException e1) { Log.e("name not found", e1.toString()); } catch (NoSuchAlgorithmException e) { Log.e("no such an algorithm", e.toString()); } catch (Exception e) { Log.e("exception", e.toString()); } } }); } } 

首先,为了在本地计算机上生成密钥哈希值,运行Java的keytool实用程序(应该在您的控制台的path上)对Androiddebugging密钥库。 这是,默认情况下,在你的家.android目录)。

在Ubuntu上,这是在我的电脑中开火

 keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 

我犯了一个小错误,应该记住。 如果你正在使用你的密钥库然后给你的别名,而不是androiddebugkey …

我解决了我的问题。 现在,如果Facebook已经安装在我的设备上,那么我的应用程序也正在获取Facebooklogin集成的数据。 只关心你的散列键。

请参阅下文。

 C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64 

然后按Enter键 – 它会要求您input密码,然后input您的密钥库密码,而不是Android。

凉。

对于不懂代码的人来说,AivarsDa的谷歌关键工具是我最简单的解决scheme。 只需从中获取散列键并复制到Facebook应用程序设置。 keygen工具上的共享使得我的应用程序在手机上崩溃,所以我只是手动在记事本中input并将其复制到fb。 最后经过这一步,经过几天的挫折

在c盘和openssl文件夹中打开ssl之后,使用这个命令。

 keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.android\debug.keystore" | openssl sha1 -binary | openssl base64 

就类似的问题回答 ,我发现这是为我工作:

  • 将你想知道散列的apkname.apk文件复制到' Java \ jdk1.7.0_79 \ bin '文件夹
  • 运行这个命令keytool -list -printcert -jarfile apkname.apk
  • 复制SHA1值并使用此站点进行转换
  • 使用转换后的Keyhash值( 例如:zaHqo1xcaPv6CmvlWnJk3SaNRIQ =