Facebook Android 生成密钥哈希

124

我正在尝试创建一个集成Facebook的Android应用程序,我已经看了文档中生成密钥散列文件的部分,它指定运行以下代码:

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

当我在终端中运行时,出现密钥库篡改或密码不正确的错误,

我只想生成我的键哈希

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


2
你是否使用了正确的密码? - President James K. Polk
当我在终端输入命令时,它没有给我输入密码的选项。 - Scott
6
我明白了,有时候我真傻,要在一行内输入命令,不要复制粘贴。 - Scott
http://developementsolution.blogspot.in/ - Akarsh M
默认密码是:android。否则,AnhSirk Dasarp的方法也不错。 - Pranaysharma
显示剩余3条评论
20个回答

4
为了生成发布密钥哈希,您需要遵循一些简单的步骤。
1)下载Openssl 2)在C驱动器中创建一个名为openssl的文件夹
3)将Zip文件提取到此在C驱动器中创建的openssl文件夹中。
4)从.android文件夹中复制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)复制以下代码并按回车键
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别名名称为abcd)-keystore“输入此处生成的已签名apk keystore路径”|“openssl bin文件夹路径在此处输入”sha1-binary|“openssl bin文件夹路径在此处输入”base64
7)现在您需要输入密码,密码=(在此处输入您的签名密钥库密码)
8)您获得了用于发布应用程序密钥哈希的密钥库

3

生成调试哈希密钥

  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

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
注意:请用您自己的安装路径替换此示例中的openssl.exe路径。
4.它会提示输入密码,例如: 输入密钥库口令:android
请像上面显示的那样输入android作为密码。
就是这样!您将获得一个28个字符长的密钥。干杯!
使用相同的过程获取发布密钥。只需用以下命令替换命令,并使用您的发布密钥别名。 keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | “PATH FOR openssl.exe” sha1-binary | openssl base64

但它显示要求密码,我已经提供了签名密钥库密码,然后显示中文语言。 - Harsha
确保openssl\bin和java...\bin的路径已正确设置。 - KawaiKx

2

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

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

2

关于这个主题的博客文章很棒

从.p12密钥中提取密钥哈希

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

适用于Mac的出色且简单的十六进制编辑器:HexFiend

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

链接


对于Adobe AIR应用程序开发人员(Flash或Apache Flex)来说,这是很好的信息。而Facebook SSO的“类名”应该是AppEntry - Alexander Farber

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()函数,然后制作签名版本并安装它,并运行它,您将在对话框中获得哈希密钥,只需记录下来并在Facebook开发者账户上更新它,然后注释该函数并创建另一个签名APK。


1
如果你的密码为android是错误的,那么请在电脑上输入你的密码,这对我有效。
生成keyHash,请尝试这个链接这里

1
我能够通过这里的一些解决方案来完成所需的任务,但是我想,哇,那真是愚蠢...为什么不写一个小的Java代码来做这件事,并将其打包成Jar文件,所以我就这样做了...
一个下载链接的Jar文件
在Windows 8上运行...没有尝试其他操作系统。

1
我不明白的是,如果我花了几个小时学习并草拟出这个方案,为什么没有任何大公司已经提供了一个简单的方法来获取他们要求我们提供的信息??? - TacB0sS

0

在 Kotlin 中使用以下代码以将 key hash 打印在日志中:

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

    }

0

唯一有效的方法是使用密码android。为什么任何指南都没有提到这一点呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接