Keytool 生成 32 个字符的长密钥散列而不是 28 个

Keytool generates 32 character long key hash instead of 28

我正在使用以下命令为 Android

的 Facebook 应用程序控制台生成密钥哈希
.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64

Facebook developers SDK help

所述

根据帮助页面和开发人员控制台,密钥散列的长度应为 28 个字符,但密钥工具生成的密钥长度为 32 个字符。

Java版本:jdk1.8.0_31 OS : Windows 7

正在为 android 生成。

编辑

根据@Shreyash-mashru 的建议,我使用以下代码获取密钥哈希

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "my.package.name",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());

    } catch (NoSuchAlgorithmException e) {
        Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
    }

但是,如果有人仍然可以帮助我理解为什么命令行工具生成 32 个字符的长密钥哈希而不是 28 个...

.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64

这对我来说很好用。再试一次。

我遇到了同样的问题。它与使用我现有版本的 openSSL(64 位)有关。我下载了 32 位版本 from here 并将其安装到 c:\openSSL。然后命令指向这个版本的 SSL,我得到了 28 个字符的哈希值。

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64

生成的散列是32个字符,因为有一个回车符return和一个换行符添加到末尾。要解决此问题,您可以:

删除散列的最后 5 个字符,并在末尾添加一个 "="。例如:"1234567890abcdefghijklmnopqrstuv"(32 个字符)--> "1234567890abcdefghijklmnopq="(28 个字符)

或:

弹出一个 javascript 控制台,然后使用:

btoa(atob("your hash string").slice(0, -2))

其中 "your hash string" 是您的 32 字符散列。

也遇到了这个问题,对我来说,我使用的是 windows powershell,它一直生成一个 32 个字符的密钥。当我切换到普通的旧 cmd 时,它按预期工作。

尝试命令提示符中的命令!

它会要求你输入密码然后你会得到散列键

powershell 上尝试相同的命令未提供正确的哈希键。

尝试正常的cmd提示或使用git bash命令提示将生成28个字符长的字符串。不要使用 Windows PowerShell,因为它会生成 32 个字符长的字符串。

如果您正在使用 windows 然后打开 cmd 并输入以下命令

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

运行这在任何