有没有办法从签名的 APK 中获取密钥哈希?我们有一个签名的 Android apk 文件,我们想找出这个 APK 的密钥哈希,用于 Facebook SDK。我们可以通过 jarsigner 之类的方法来做到这一点吗?
有什么建议么?
6 回答
在 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
对于从 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) {
}
更新:
使用安卓工作室(2.1.2):
- 在工作室打开您的项目,然后单击 gradle 图标。
- 选择您的应用 -> 任务 -> android -> SigningReport
这将运行一个 gradle 任务,该任务将使用 md5 和 sha1 密钥打印调试和发布证书
您可以从这里下载 openssa
- 要生成签名,您需要在您的电脑上安装 openssl。如果你没有从这里下载 openssl
- 在 C: 中,创建 openssl 文件夹
- 将下载的 openssl zip 文件的内容解压到 C:drive 的 openssl 文件夹中
- 打开命令提示符
- 在命令提示符下移动到 openssl 的 bin 即 C:\openssl\bin
运行以下命令以生成您的密钥哈希。在生成 hashkey 时,它应该询问您的密码。
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Anhsirk.android\debug.keystore" | openssl sha1 -binary | openssl base64
注意:在上面的代码中,请注意您需要提供您的用户路径(即在我的情况下它是 C:\Users\Anhsirk,您只需为您的用户帐户更改此设置。
输入密码为android。如果它不要求输入密码,则您的密钥库路径不正确。
现在回答为时已晚,但它是获取签名应用密钥哈希的非常快速的方法。
安装apk,它可以提取所有应用程序的密钥哈希。
下载地址:https ://apkpure.com/key-hash-key/notimeforunch.keyhash
当我构建我的 Facebook 应用程序时。我使用了我的 Android 密钥库。有一个哈希函数。常用在 Google API 中。(参见那里的说明)。如果您拥有该应用程序并对其进行了签名;否则这应该没问题..你基本上搞砸了。没有办法。
您还可以使用以下方法从您的 apk 签名密钥库文件中获取 base64 中的 Sha1 Hash(根据 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 的密钥库文件的路径(在调试或临时分发中)。