Java 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”,然后按回车键。然后

我不知道如何获取使用Facebook Android SDK所需的密钥哈希。我发现我可以通过以下命令使用
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上签名和获取证书密钥:

  • 下载并安装基于Windows 32或64位的OpenSSL。(注:下载并安装第一个Visual C++ 208也可从该站点重新下载)
  • 将已安装OpenSSL的bin目录放在windows路径中
  • 打开命令提示符并转到C:\Users{User_Name}.android
  • 现在将此命令放在cmd“keytool-exportcert-alias androiddebugkey-keystore debug.keystore | openssl sha1-binary | openssl base64”上(请参阅)
  • 现在输入密码“facebook”,不带双引号
  • 现在将生成一个哈希键
  • 最后进入Facebook开发者网站。确保您已登录Facebook,并使用右上角的下拉菜单进入“开发者设置”:
  • 进入开发者设置后,从左侧的导航栏中选择“示例应用”,然后将密钥哈希添加并保存到配置文件中:

  • 您可以使用下面的代码获取哈希键:

    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) {
    
        }
    }