谷歌Play应用签名密钥哈希

65

我已选择使用Google Play应用签名,并且我知道Google会更改应用的签名密钥,我找到了Sha 1证书,但找不到keyhash。

如何获取我发布的应用程序的keyhash?是否有一种从证书中提取它的方法?

5个回答

257

您可以使用以下命令将以十六进制格式表示的SHA-1哈希(在Play控制台中找到,参见发布管理->应用程序签名)转换为Base64哈希:

您可以使用以下命令将在Play控制台中找到的以十六进制格式表示的SHA-1哈希转换为Base64哈希:

echo 33:4E:48:84:19:50:3A:1F:63:A6:0F:F6:A1:C2:31:E5:01:38:55:2E | xxd -r -p | openssl base64

输出:

M05IhBlQOh9jpg/2ocIx5QE4VS4=

这个哈希值可以在设置Facebook应用程序时使用。


14
在Windows上使用Git Bash。您可能需要安装OpenSSL。https://code.google.com/archive/p/openssl-for-windows/downloads - Harsh
3
这是Stackoverflow上最好的答案。 - Ken Zira
每次上传捆绑包时,这个哈希键值是否会更改?如果是的话,用户就必须前往 Facebook 控制台并手动更新哈希值。 - helloworld
2
@helloworld 不,它仍然是一样的。 - Adil Soomro

55

你可以从Sha1证书签名中提取keyhash。通常以以下方式提取key hash:

public static String getKeyHash(final Context context) {
    PackageInfo packageInfo = getPackageInfo(context, PackageManager.GET_SIGNATURES);
    if (packageInfo == null)
        return null;

    for (Signature signature : packageInfo.signatures) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            return Base64.encodeToString(md.digest(), Base64.NO_WRAP);
        } catch (NoSuchAlgorithmException e) {
            Log.w(TAG, "Unable to get MessageDigest. signature=" + signature, e);
        }
    }
    return null;
}

您可以看到签名的SHA-1版本已进行Base64编码。

在Google Play开发者控制台的应用签名菜单下,您将看到类似于以下的Sha-1证书签名:

SHA1: 3B:DA:A0:5B:4F:35:71:02:4E:27:22:B9:AC:B2:77:2F:9D:A9:9B:D9

基本上,你需要将这个内容转换为一个字节数组并对该字节数组进行Base64编码。你可以像这样操作:

byte[] sha1 = {
    0x3B, (byte)0xDA, (byte)0xA0, 0x5B, 0x4F, 0x35, 0x71, 0x02, 0x4E, 0x27, 0x22, (byte)0xB9, (byte)0xAc, (byte)0xB2, 0x77, 0x2F, (byte)0x9D, (byte)0xA9, (byte)0x9B, (byte)0xD9
};
Log.e("keyhash", Base64.encodeToString(sha1, Base64.NO_WRAP));

你可以将此keyhash注册到Facebook Android登录设置或任何你喜欢的地方。


{btsdaf} - Chris
下一个评论更简单,所以我踩了这个。 - Gonzalo Serrano
@GonzaloSerrano 但我的是跨平台的?>< - CoderSpinoza
@CoderSpinoza 另一个可以在任何 UNIX(Linux、MacOS)上运行。 - Gonzalo Serrano
8
你可以使用类似 https://cryptii.com/base64-to-hex 这样的在线工具。将它设置为“ENCODE”,在左边输入“HEX”,右边会得到“HASHKEY”。请注意,不要改变原文的意思。 - sebasira

12

最简单的方法是复制 Facebook 的错误消息并从中复制他们期望收到的 keyhash。

只需确保您正在使用从 Google Play 下载的应用程序 :)输入图像描述


1
echo "应用签名密钥由Google在Play控制台中生成" | xxd -r -p | "openssl路径" base64

2
来自评论:嗨,请不要只回答一个命令。尝试提供有关您的解决方案如何工作的良好描述。请参阅:如何撰写好答案?。谢谢。 - sɐunıɔןɐqɐp

0

首先需要一些重要的工具

1. OpenSSL:在您的电脑上安装 下载链接 2. 在您的电脑或笔记本电脑上安装Java程序 立即下载

简单地运行命令提示符 1. 进入您的目录 2. 输入cd Program Files 3. 选择您已经安装了Java程序的位置 然后将所有目录复制到不带C驱动器的目录中,并将该目录粘贴到带有cd的命令提示符中 4. keytool -exportcert -alias gci -keystore D:\folder name where place your release key |C:\openssl\bin\openssl sha1 -binary |C:\openssl\bin\openssl base64

欲了解更多信息,请访问此处


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