Android-Facebook应用程序的密钥哈希

rav*_*abu 224 windows android facebook

我正在开发一款Android应用程序,我希望在其中整合Facebook发布功能.我下载了Facebook-Android SDK,我在那里得到了readme.md(文本文件),其中提到了生成Android的密钥哈希.我该如何生成它?

Avi*_*i C 307

以下是步骤 -

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

  2. 提取它.在C:/中创建一个文件夹-OpenSSL,并在此复制提取的代码.

  3. 检测debug.keystore文件路径.如果你没找到,那么在C:/中搜索并在下一步中使用命令中的Path.

  4. 检测您的keytool.exe路径并转到该dir/in命令提示符并在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

    • 它会要求输入密码,放入android
    • 就这样.你会得到一个密钥哈希

欲了解更多信息,请访问

  • 注意64位用户:这适用于版本openssl-0.9.8e X64只能与openssl-0.9.8k X64一起使用 (10认同)
  • 这个答案在Win7 x64上几乎对我有用.但是,生成的编码证书不正确.Bryan Bedard的答案将产生正确的证书价值.我猜测窗户上的管道是某种程度上的罪魁祸首. (5认同)
  • 该命令应该在windows系统中java的bin文件夹中执行. (2认同)

Bas*_*ssa 232

您可以在任何活动中使用此代码.它会将logkey记录在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());
}
Run Code Online (Sandbox Code Playgroud)

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

  • 伙计们,小心,创建apk后,密钥哈希改变了!因为使用这段代码你得到调试密钥库哈希,但是当创建apk时,它是另一个哈希,在模拟器上尝试你的apk后必须从日志中捕获它,然后删除代码并再次导出没有这个日志:) - 我知道这是一个麻烦: D但对我来说它比keytool更容易,祝你好运;) (26认同)
  • Opensssl总是在创造问题.这种方法是最好的方法.只需创建一个空白的应用程序,并打印密钥,使用它.谢啦!! (4认同)

Sha*_*har 133

我为Windows和Mac OS X创建了一个小工具.只需输入密钥存储文件,然后获取哈希密钥.

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

检查出来,下载Windows版本下载Mac OS X版本 (Dev-Host有时可能会关闭...所以如果链接坏了,PM我和我会修复它).

我希望能帮到你们......

2014年12月31日 - 编辑: 将主持人改为AFH.如果链接断开,请告诉我

2013年11月21日 - 编辑:

根据用户的要求,我添加了一个默认的密钥库位置和一个DONATE按钮.如果我帮助你,请随意使用它.:)

屏幕截图 屏幕截图2

  • 我找到的最好的一个 (2认同)

Bry*_*ard 61

目前Facebook的Android教程中的说明 在Windows下无法正常运行.他们的示例显示了如何将keytool输出传递给openssl,但如果在Windows下尝试此操作,则输出由于某种原因无效.我发现我必须使用中间文件才能使其正常工作.以下是适合我的步骤:

首先从Google 下载openssl for Windows.

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
Run Code Online (Sandbox Code Playgroud)

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

  • 什么是PITA - 但布莱恩是对的!该命令几乎无论发生什么,输出哈希都是错误的,密码是错误的,或者管道是否正常工作 - 你仍然会得到一个哈希但它不会起作用.所以(在Windows上)我放弃了Powershell并尝试了Cygwin - 仍然没有工作.只有在将debug.keystore文件复制到工作目录后才能让它运行并运行!! (2认同)
  • 总而言之,在Windows上,要么使用Bryan的分解技术,要么在工作目录中使用cygwin和密钥库文件:keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64如果它没有提示您输入密码,那么它没有正确找到密钥库文件. (2认同)

Del*_*019 47

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

   keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

让我把这个命令分解成片段.

  1. 寻找"keytool.exe".您可以在C:驱动器上搜索它.你可以在"java jdk"或找到它"java jre".如果您已安装多个版本,请选择任何版本.

  2. 打开CMD提示符,然后转到上面找到的目录"keytool.exe".

    剪辑"exe`"并粘贴Facebook页面上提供的上述命令.

  3. 输入此信息时将收到错误信息,即输入输出命令中未识别OpenSSL.解决方案:从OpenSSL下载"Openssl" (如果您有64位计算机,则必须下载openssl-0.9.8e X64).将其解压缩并保存在任何地方......我将其保存在OpenSSl文件夹中的C:驱动器上

  4. 在管道后面的两个位置"|"处替换上面命令中的openssl,在该命令中,您使用"C:\ OpenSSL\bin\openssl"获得OpenSSL错误.

  5. 如果提示输入密码,请输入android.

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


Ily*_*man 32

将此代码添加到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) {

}
Run Code Online (Sandbox Code Playgroud)

您可以为您的帐户添加多个hashkey,因此如果您一直在调试中运行,请不要忘记在发布模式下再次运行它.


noe*_*han 24

要获取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
  6. 完成

  • 很棒的答案.非常感谢你. (2认同)

小智 17

我发现最简单的解决方案是:

  • 打开Log Cat
  • 尝试使用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
    
    Run Code Online (Sandbox Code Playgroud)
  • 复制"abcdefgHIJKLMN + OPqrstuvwzyz"并将其粘贴到Facebook Android Key Hash区域.


Hir*_*tel 13

我已经通过这种方式为Linux OSWindows操作系统做了:

Linux的:

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

请根据您的要求更改别名密钥库的路径.

终端将要求密码密钥库中.您必须为同一个密钥库提供密码.

所以最后你会得到Release Hashkey.

视窗:

发布 Hashkey的步骤:

  • 下载Openssl(从这里下载),我已经下载了64位操作系统,你可以在这里找到更多
  • 将下载的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

请根据您的要求更改别名密钥库的路径.

注意:

请将您的详细信息放在****之间.

终端将要求密码密钥库中.您必须为同一个密钥库提供密码.

所以最后你会得到Release Hashkey.

完成


Ash*_*kol 11

  • 在这里下载openSSL for windows,你可以在这里找到64位和32位

  • 提取下载的文件

  • 在C盘中创建文件夹名称openSSL
  • 将所有提取的项目复制到openSSL文件夹(bin,include,lib,openssl.cnf)
  • 获取android调试密钥库,默认位置将是

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

  • 按Enter键,您将获得28位数的键码


小智 6

您需要通过keytool创建一个密钥库,用于Android的签名应用程序,如Android站点中描述的过程,然后您必须安装cygwin,然后您需要从谷歌代码安装openssl 然后只需执行以下命令,您将获得哈希android的密钥,然后将该哈希密钥放入您创建的Facebook应用程序中.然后你可以通过Android应用程序访问Facebook应用程序发布墙("publish_stream")可能是一个例子.

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

您需要从cygwin执行上述命令.


Man*_*Joe 6

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

然后打开cmd并输入

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)
Run Code Online (Sandbox Code Playgroud)

检查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)
Run Code Online (Sandbox Code Playgroud)

它会询问你的密码是android.


moh*_*rma 6

  1. 只需打开主要活动文件并创建以下功能:

         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) {
     }
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 现在,打开log cat并使用"KeyHash"进行搜索并复制哈希键.

  2. 您生成哈希密钥,您可以删除此功能.


Abh*_*nda 5

1)创建一个密钥来签署您的应用程序,并记住别名.

2)安装OpenSSL.

3)将OpenSSL的bin文件夹放在路径中.

4)按照FB-Android-SDK 页面上"Setup Single Sign-On"中提到的步骤操作,生成哈希密钥.确保您输入正确的别名和密钥库文件名.

5)在Facebok上创建一个应用程序,然后在"移动设备"选项卡下输入此哈希密钥.


Har*_*ker 5

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

    }
Run Code Online (Sandbox Code Playgroud)


Ram*_*ash 5

对于 Android 应用程序

此代码用于获取 Android 应用程序中的哈希密钥以进行 Facebook 集成。我已经测试了所有设备并且它可以工作。只需更改此代码的包名即可:

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

    }
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*ind 5

您可以从SHA-1密钥获取密钥哈希。非常简单,您需要从Play商店获取SHA-1(签名APK)密钥,如下图所示。在此处输入图片说明

现在,复制该SHA-1密钥,并将其粘贴到此网站http://tomeko.net中,然后检查下图以获取您的密钥哈希。

在此处输入图片说明


Ali*_*oor 5

有两种方法可用,一种复杂的,一种简单的

方法一:(有点复杂)

首先,您必须下载ssl 64bit32bit相应地,请记住下载名称包含e版本代码openssl-0.9.8e_X64.zipopenssl-0.9.8e_WIN32.zip之后的文件,不是k版本代码之后,

并放置在AndroidStudio/jre/bin目录中,如果您不知道放置在哪里,可以通过右键单击android studio快捷方式找到此目录:

在此处输入图片说明

现在你已经在一个地方管理了两个必需的东西,但你仍然必须找到适合你的路径debug.keystore,那总是可以在"C:\Users\yourusernamehere\.android\debug.keystore"

注意 如果您的应用程序已经发布或即将发布,则使用您的发布签名密钥库,当且仅当您在开发模式下进行测试时,您才可以使用 debug,keysotre

一切都设置好后,让我们在 中安排您要为生成哈希键执行的命令base64 format,您的命令将如下所示

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64
Run Code Online (Sandbox Code Playgroud)

它会提示您输入 debug.keystore 的密码,默认为 android。如果您使用自己的密钥,那么密码也将是您的。如果一切按预期进行,输出将如下所示,希望它会有所帮助

在此处输入图片说明

第二种方法(分别是简单的一种)

如果你不想经历以上所有过程,那么只需使用以下方法记录haskey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明