Facebook Android生成密钥哈希

时间:2011-03-14 23:51:24

标签: android facebook android-keystore

尝试使用Facebook集成创建一个Android应用程序,我已经到了必须生成密钥哈希文件的文档中的部分,它指定运行以下代码

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

当我在终端中运行此操作时,我收到错误的Keystore被篡改或密码错误,

我只想生成我的Key Hash

有人能指出我正确的方向吗?

21 个答案:

答案 0 :(得分:276)

为了生成密钥哈希,您需要执行一些简单的步骤。

1)从here.

下载Openssl

2)在 C 驱动器中创建 openssl 文件夹

3)将Zip文件解压缩到 C 云端硬盘中创建的 openssl 文件夹中。

4)从我的案例中的 .android 文件夹中复制文件 debug.keystore (C:\ Users \ SYSTEM.android)并粘贴到我的JDK bin文件夹中case(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)

5)打开命令提示符并在我的情况下给出JDK Bin文件夹的路径(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)。

6)复制以下代码并按Enter键

  

keytool -exportcert -alias androiddebugkey -keystore debug.keystore>   C:\ OpenSSL的\ BIN \ DEBUG.TXT

7)现在你需要输入密码,密码= android。

8)如果您在 openssl Bin文件夹中看到,您将收到一个名为 debug.txt 的文件

9)现在要么可以重新启动命令提示符,要么使用现有的命令提示符

10)返回C盘并给出openssl Bin 文件夹的路径

11)复制以下代码并粘贴

  

openssl sha1 -binary debug.txt> debug_sha.txt

12)你将在openssl bin文件夹中获得 debug_sha.txt

13)再次复制以下代码并粘贴

  

openssl base64 -in debug_sha.txt> debug_base64.txt

14)你将在openssl bin文件夹中获得 debug_base64.txt

15)打开 debug_base64.txt 文件这是你的密钥哈希。

答案 1 :(得分:146)

更新的答案(通过代码生成)更简单的方法:

根据我的经验,openssl总是很麻烦,我尝试了facebook建议的第二种方法。这太好了。这是获取哈希密钥的最佳方法。

第二个选项是打印发送到Facebook的密钥哈希并使用该值。对主活动中的onCreate()方法进行以下更改:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.facebook.samples.loginhowto", 
                    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) {

        }
        ...other operations

}//end of onCreate

将com.facebook.samples.loginhowto替换为您自己的包名称(Manifest.xml中的包名称)。

官方链接 - https://developers.facebook.com/docs/android/login-with-facebook/(请参阅页面底部)

OLD ANSWER(使用openssl生成Keyhash)

  1. 要生成签名,您需要在PC上安装openssl。如果您没有一个下载openssl from here
  2. 在C:中,创建openssl文件夹
  3. 将下载的openssl zip文件的内容解压缩到openssl drive
  4. 中的C:文件夹
  5. 打开命令提示符
  6. 在命令提示符
  7. 中移至bin的{​​{1}},即openssl
  8. 运行以下命令以生成您的keyhash。生成hashkey时应该问你密码。

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

  9. 注意:在上面的代码注释中,您需要提供您的用户路径(即在我的情况下,它是C:\ Users \ Anhsirk,您只需需要为您的用户帐户更改此内容。

      

    将密码设为 android

    。如果没有要求输入密码,则密钥库路径不正确。

    如果一切正常,它应该给你下面的哈希键。

    enter image description here

答案 2 :(得分:20)

删除〜/ .android / debug.keystore下的调试证书(在Linux和Mac OS X上);该目录类似于Windows上的%USERHOME%/。android。

然后,当您下次尝试构建调试包时,Eclipse插件应生成新证书。

如果有效,请告诉我。

答案 3 :(得分:14)

可以从应用程序本身获取正确的密钥,方法是添加以下代码以覆盖正确的密钥哈希(如果是Facebook SDK 3.0,则可以使用)

try {
            PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage",         PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.e("MY KEY HASH:", sign);
                Toast.makeText(getApplicationContext(),sign,         Toast.LENGTH_LONG).show();
            }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

将com.package.mypackage替换为您的包名

答案 4 :(得分:12)

<强>予。为facebook创建密钥哈希调试

添加代码以打印出facebook的密钥哈希

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.google.shoppingvn", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.i("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

<强> II。为facebook创建密钥哈希发布

  1. 下载openssl-0.9.8e_X64
  2. 在C盘中创建一个openssl文件夹
  3. 将Zip文件解压缩到openssl文件夹
  4. 开始 - &gt;运行:cmd(按回车键)
  5. (按)cd C:\ Program Files \ Java \ jdk1.6.0_45 \ bin。注意:C:\ Program Files \ Java \ jdk1.6.0_45 \ bin:是计算机中jdk文件夹的路径
  6. (按)keytool -exportcert -alias gci -keystore D:\ folder \ keystorerelease | C:\ openssl \ bin \ openssl sha1 -binary | C:\ openssl \ bin \ openssl base64。注意:D:\ folder \ keystorerelease:是keystorerelease的路径

  7. 输入密钥库密码:这是您的注册密钥库释放时的密码。

    然后你将有一个密钥哈希:jDehABCDIQEDWAYz5Ow4sjsxLSw =

  8. 登录facebook。访问管理应用程序。将密钥哈希粘贴到developers.facebook.com上的应用程序

答案 5 :(得分:9)

解决这个问题的最简单方法:

我已经有这个问题已经有两个月了。我的关键哈希值已经达到了9个。今天我终于找到了简单的解决方案:

第1步:

在手机上安装从Facebook开发者页面下载的facebook sdk。不要安装正常的Facebook应用程序。确保您可以登录Facebook。然后退出。

第2步:

将您的最终发布密钥导出为apk,就像将其上传到Play商店一样。

第3步:

通过USB线或USB棒将Apk文件放在手机上。

第4步:

使用文件管理器安装您的应用:Example

第5步:

启动您的应用并尝试使用Facebook登录。将打开一个对话框,告诉您:“在Facebook开发者控制台中找不到密钥YOURHASHKEY”

第6步:

记下钥匙。

第7步:

将其放入您的Facebook开发者控制台并保存。现在你完成了。下载使用以前使用的密钥库发布的应用程序的任何人都可以登录Facebook。

享受

答案 6 :(得分:7)

如果您要发布,请使用您用于导出应用程序的密钥库而不是debug.keystore。

答案 7 :(得分:6)

调试证书的密码是android而不是Android

答案 8 :(得分:6)

最后:)

这是我的故事:

  1. 设置布局后,将此代码添加到主活动中。

    try { 
      PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES);
      for (Signature signature : info.signatures) {
          MessageDigest md = MessageDigest.getInstance("SHA");
          md.update(signature.toByteArray());
          String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
          Log.e("MY KEY HASH:", sign);
          //textInstructionsOrLink = (TextView)findViewById(R.id.textstring);
          //textInstructionsOrLink.setText(sign);
          Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
      }
    } catch (NameNotFoundException e) {
        Log.d("nope","nope");
    } catch (NoSuchAlgorithmException e) {
    }
    
  2. 将PROJECTNAME更改为您的包裹名称!

  3. 在您的应用中签名(Android工具 - >导出签署的应用程序)
  4. 在从2选项粘贴代码的主活动中,在布局中创建带有text stringstring
  5. 的TextView
  6. 取消注释两行,您的签名代码将设置为TextView 6 Wuolia,你有你的HASH,在你的手机上安装应用!!!并检查你的哈希键!
  7. 现在可见时,转到您创建的Facebook应用并将其添加到[Key Hashes]
  8. 请注意,您的包名称应与[Key Hashes]
  9. 下的[包名称]相同
  10. 祝你有个愉快的一天:)

答案 9 :(得分:5)

为facebook生成的一行解决方案

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

答案 10 :(得分:4)

要生成发布密钥哈希,您需要执行一些简单的步骤。

1)下载Openssl

2)在C盘中制作一个openssl文件夹

3)将Zip文件解压缩到在C Drive中创建的这个openssl文件夹中。

4)从我的案例中的.android文件夹中复制File debug.keystore(C:\ Users \ SYSTEM.android)并粘贴到我的案例中的JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05) \ bin)中

5)打开命令提示符并在我的例子中给出JDK Bin文件夹的路径(C:\ Program Files \ Java \ jdk1.7.0_40 \ bin)。

6)复制以下代码并按Enter键

keytool -exportcert -alias abcd-keystore D:\ Projects \ MyAppFolder \ keystore.txt | C:\ openssl \ bin \ openssl sha1 - binary | C:\ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias(你的唱歌apk别名在这里输入就像我的签名apk alian名字是abcd)-keystore&#34;签名apk生成的keystore apth在这里输入&#34; | &#34; openssl bin文件夹路径输入此处&#34; sha1 - 二进制| &#34; openssl bin文件夹路径输入此处&#34; BASE64

7)现在您需要输入密码,密码=(在此输入您的签名密钥库密码)

8)你有用于发布应用密钥哈希的密钥库

答案 11 :(得分:3)

即使这个帖子已经老了,但我想分享一下我的经历(最近开始与facebook合作),这在我看来很直接:

  1. 从下面的链接下载openssl: https://code.google.com/p/openssl-for-windows/downloads/list
  2. 将其解压缩到本地驱动器(例如,C:\ openssl)
  3. 要获取facebook集成的开发键,请在Windows命令行中使用以下命令:

    keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%.android \ debug.keystore | “C:\ openssl \ bin \ openssl.exe”sha1 -binary | “C:\ openssl \ bin \ openssl.exe”base64

  4.   

    注意!:请替换openssl.exe的路径(在此示例中为   “C:\ openssl \ bin \ openssl.exe”)带有您自己的安装路径。

    1. 它会提示输入密码,例如
    2.   

      输入密钥库密码:android

      键入android作为密码,如上所示。

      多数民众赞成!您将获得一个28个字符的长键。干杯!

      使用相同的步骤获取Release键。只需使用以下命令替换该命令,并使用您的发布密钥别名。

      keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | “PATH FOR openssl.exe”sha1 -binary | openssl base64

答案 12 :(得分:2)

尝试传递密钥的密码并将其存储为命令的一部分

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

答案 13 :(得分:2)

关于这个主题的精彩博文

从.p12键中提取Key Hash

  1. 打开终端或命令行,然后导航到.p12键的位置。
  2. 输入:“keytool -v -list -keystore mycert.p12 -storetype pkcs12”,其中mycert.p12是.p12密钥的文件名。
  3. 输入密钥库密码(导出时使用的密码.p12密钥)。 4。复制sha1指纹签名字节文本。
  4. 写入“sha1.bin”文件需要sha1指纹签名处的字节。您可以使用十六进制编辑器粘贴复制的字节。然后,将文件另存为“sha1.bin”。
  5. 再次打开终端并输入:“openssl base64 -in sha1.bin -out base64.txt”。
  6. 生成的“base64.txt”将包含Facebook所需的Key Hash。
  7. Mac的简单十六进制编辑器:HexFiend

    OpenSSL应该预先安装在mac上,这里是Windows版本的链接。

    Link

答案 14 :(得分:2)

生成调试哈希键

  public String hashkey(Context context) {
        String keyhash = "";
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(context.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));
                keyhash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        return keyhash;
    }

生成发布哈希密钥

 keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64

答案 15 :(得分:2)

生成哈希密钥的最简单方法。

要求: SHA1键

您可以通过运行 signingReport

找到SHA1密钥。

请参考下图。

enter image description here

运行文件后,将生成包含必需的sha1键的输出。

enter image description here

然后转到 http://tomeko.net/online_tools/hex_to_base64.php

并粘贴您的sha1键

enter image description here

最后,您将获得Required HashKey。

答案 16 :(得分:1)

我能够用这里的一些解决方案执行所请求的任务,但是想到自己,男孩是愚蠢的......为什么不写一个小的Java代码来做这个并将它打包到一个Jar中,所以我做了......

一个link to download Jar

适用于Windows 8 ...没有尝试任何其他操作系统。

答案 17 :(得分:1)

大家好,我的故事如何签名有Facebook的关键

首先,你只需在第一堂课中复制这两种方法

    private void getAppKeyHash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), 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));
            System.out.println("HASH  " + something);
            showSignedHashKey(something);

        }
    } catch (NameNotFoundException e1) {
        // TODO Auto-generated catch block
        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());
    }
}
public void showSignedHashKey(String hashKey) {

    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle("Note Signed Hash Key");
    adb.setMessage(hashKey);
    adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    adb.show();
}

**从您的oncreate方法调用函数getAppKeyHash()如果你想要签名哈希然后使签名的build install签名构建并运行你将在对话框中获得哈希键然后只需记下它并在facebook开发帐户上更新它并注释该功能并制作另一个签名APK **

答案 18 :(得分:1)

如果你的密码= android是错误的,那就把你的电脑密码放在适合我的地方。

要生成keyHash,请尝试此链接 Here

答案 19 :(得分:0)

唯一适合我的是使用密码android。为什么在那里没有提到任何指南?

答案 20 :(得分:0)

在kotlin中将此用于日志中的打印密钥哈希

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }
相关问题