【问题标题】:Should Android KeyHash depend only on PC generating it, not methods or phones?Android KeyHash 是否应该只依赖于 PC 生成它,而不是方法或手机?
【发布时间】:2015-02-06 21:06:28
【问题描述】:

我有一个关于使用 debug.keystore 生成 Android KeyHash 的问题,我不太了解。

我的理解是,如果我在我的 PC 上生成一个 KeyHash,无论我如何生成它,它都应该给我一个唯一的 keyhash。我可以将这个 keyhash 用于与 Facebook SDK 集成。

但是,我发现如下:

  1. 我使用 Facebook 开发者页面上建议的以下命令行:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.android\debug.keystore | openssl sha1 -二进制 | openssl base64 带密码:android

我得到了以下keyHash:E3P3dslAkuReIuFQJC5oTlhkRrs=

  1. 然后我使用我在 StackOverflow 上找到的以下方法:

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

1) 从此处下载 Openssl。

2) 在C盘创建一个openssl文件夹

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

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

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

6) 复制以下代码并回车

keytool -exportcert -alias androiddebugkey -keystore debug.keystore > c:\openssl\bin\debug.txt

7) 现在你需要输入密码,Password = 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 文件这是您的密钥哈希。

密码:android

我得到了以下keyHash:zp+a+1HT9jLTgob9Htw9EFrZatY=

这两种方法都是在同一台 PC 上生成的,并使用 同一 debug.keystore。为什么他们不一样?他们不应该是一样的吗?

另一个问题是我在不同手机上使用 android 代码获得的 KeyHash。我使用以下代码(再次在 StackOverflow 上找到):

public static void showHashKey(Context context) {  
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                "com.example.loginfb", PackageManager.GET_SIGNATURES); //Your package name here
        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) { 
    }
}

然后我用两部不同的手机查看了日志窗口,发现如下:

LG 手机 Android 2.3 12-09 09:22:51.832: I/KeyHash:(20572): NlsbfhmR2/ZCXnpKNNsH+0II8LM=

三星手机安卓4.2.2 12-09 09:51:21.054: I/KeyHash:(20067): zp+a+1HT9jLTgob9Htw9EFrZatY=

他们给了我不同的哈希键。但是其中一个(zp+a+1HT9jLTgob9Htw9EFrZatY=)与上面的第二种方法是一致的。

有人知道这里发生了什么吗?我真的很困惑。

感谢您的回复。

【问题讨论】:

    标签: android facebook android-keystore


    【解决方案1】:

    密钥哈希来自用于签署 APK 的密钥。

    对于您的调试会话,使用默认调试密钥。

    通常,当您向公众发布应用时,您会使用另一个密钥。因此密钥哈希是不同的。

    【讨论】:

    • 此时我还没有获得带有release keystore的KeyHash。我所做的只是在开发我的应用程序时使用 debug.keystore。
    • 只是为了集成到Facebook SDK,程序化方法(showKeyHash)更准确
    • 应该是一样的,很可能你通过命令访问的keystore和你导出APK的keystore不一样
    • 我确定密钥库是同一个。我仔细检查了几次。
    猜你喜欢
    • 2013-03-08
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多