Keytool生成32个字符的长密钥哈希而不是28个

Jal*_*esh 24 android facebook keytool

我使用以下命令为Android的Facebook应用控制台生成密钥哈希

.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

正如Facebook开发者SDK帮助所述

根据帮助页面和开发人员控制台,密钥散列应该是28个字符长,但是keytool生成32个字符的长密钥.

Java版本:jdk1.8.0_31操作系统:Windows 7

为android生成.

编辑

根据@ Shreyash-mashru的建议,我使用以下代码来获取keyhash

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());
    }
Run Code Online (Sandbox Code Playgroud)

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

小智 66

遇到这个问题,对我来说,我使用Windows PowerShell并且它一直生成一个32个字符的密钥.当我切换到普通的旧cmd时,它按预期工作.


CRi*_*ice 5

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

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

要么:

弹出以打开JavaScript控制台,然后使用:

btoa(atob("your hash string").slice(0, -2))
Run Code Online (Sandbox Code Playgroud)

"your hash string"您的32个字符的哈希值在哪里。