有没有办法从签名APK获取密钥哈希?

时间:2013-07-02 11:02:34

标签: android facebook codesign

有没有办法从签名APK获取密钥哈希? 我们有一个签名的Android apk文件,我们想找到这个APK的密钥哈希,用于Facebook SDK。 我们可以通过像jarsigner这样的东西吗?
有什么建议吗?

6 个答案:

答案 0 :(得分:37)

对于从openssl获取密钥的Windows用户,有时可能会很棘手..我总是使用它来找到正确的  签名..只需将此代码粘贴到您的onCreate()并运行即可。

 // Add code to print out the key hash
  try {
  PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
  for (Signature signature : info.signatures) {
  MessageDigest md = MessageDigest.getInstance("SHA");
  md.update(signature.toByteArray());
  Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
      }
  } catch (NameNotFoundException e) {

  } catch (NoSuchAlgorithmException e) {

  }

<强>更新

使用Android studio(2.1.2):

  1. 在工作室上打开项目,然后单击gradle图标。
  2. 选择您的应用 - &gt;任务 - &gt; android - &gt; SigningReport
  3. 这将运行一个gradle任务,它将使用md5和sha1键打印调试和发布证书

答案 1 :(得分:37)

在linux上,我使用此命令从apk获取密钥哈希:

 keytool -list -printcert -jarfile [path_to_your_apk] | grep -Po "(?<=SHA1:) .*" |  xxd -r -p | openssl base64

对于Mac用户(OS X),因为没有grep -P支持

keytool -list -printcert -jarfile ~/Downloads/YOURAPKFILE.apk | grep "SHA1: " | cut -d " " -f 3 | xxd -r -p | openssl base64

答案 2 :(得分:9)

您可以从here

下载openssa
  1. 要生成签名,您需要在PC上安装openssl。如果你 没有从这里下载openssl
  2. 在C:中,创建openssl文件夹
  3. 将下载的openssl zip文件的内容解压缩到openssl中 C:驱动器中的文件夹
  4. 打开命令提示符
  5. 在命令提示符
  6. 中移动到openssl的bin,即C:\ openssl \ bin
  7. 运行以下命令以生成keyhash。在生成时 hashkey它应该问你密码。

    keytool -exportcert -alias androiddebugkey -keystore   "C:\Users\Anhsirk.android\debug.keystore" | openssl sha1 -binary | openssl base64
    
  8. 注意:在上面的代码中,请注意您需要提供用户路径(例如,在我的情况下,它是C:\ Users \ Anhsirk,您只需要为您的用户更改此信息帐户。

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

答案 3 :(得分:1)

回答为时已晚,但是它是获取Signed应用程序密钥哈希值的快速方法。

安装apk,它可以提取所有应用的密钥哈希。

从以下位置下载:https://apkpure.com/key-hash-key/notimeforunch.keyhash

答案 4 :(得分:0)

当我构建我的Facebook应用程序时。我使用了我的Android密钥库。有一个散列函数。通常用于Google API。(请参阅此处获取说明)。如果您拥有该应用并签名;这应该没有问题,否则......你基本上搞砸了。没办法。

答案 5 :(得分:0)

您还可以使用以下方法从您的 apk 签名密钥库文件中获取 base64 中的 Sha1 哈希(在 Facebook 的情况下需要):-

Mac: keytool -exportcert -alias <KEY_STORE_ALIAS> -keystore <KEY_STORE_PATH> | openssl sha1 -binary | openssl base64
 
Windows: keytool -exportcert -alias <KEY_STORE_ALIAS> -keystore <KEY_STORE_PATH> | openssl sha1 -binary | openssl base64

您还需要使用 openssl 来执行此命令。

例如:

keytool.exe -list -v -keystore "%LocalAppData%\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android -keypass android | openssl sha1 -binary | openssl base64

其中,"%LocalAppData%\Xamarin\Mono for Android\debug.keystore" 应替换为用于签署 apk 的密钥库文件的路径(在调试或临时分发时)。