Android Key Hash是否应仅依靠生成它的PC,而不是方法或手机?

时间:2014-12-09 03:41:08

标签: android facebook android-keystore

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

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

然而,我发现的是以下内容:

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

    keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%.android \ debug.keystore | openssl sha1 -binary | openssl base64   密码:android

    我获得了以下keyHash:E3P3dslAkuReIuFQJC5oTlhkRrs =

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

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

           

      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.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文件这是你的密钥哈希。

           

      密码:android

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

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

      另一个问题是我在不同手机上使用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 =

           

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

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

      任何人都知道这里发生了什么?我很困惑很多次。

      感谢您的回复。

1 个答案:

答案 0 :(得分:0)

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

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

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