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

时间:2015-10-26 07:10:45

标签: android facebook keytool

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

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

正如Facebook developers SDK help

所述

根据帮助页面和开发人员控制台,密钥散列应该是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());
    }

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

6 个答案:

答案 0 :(得分:60)

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

答案 1 :(得分:5)

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

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

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

"1234567890abcdefghijklmnopq="

btoa(atob("your hash string").slice(0, -2)) 是你的32个字符哈希。

答案 2 :(得分:0)

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

  

keytool -exportcert -alias androiddebugkey -keystore   " C:\用户\ USERNAME.android \ debug.keystore" | " C:\ OpenSSL的\ BIN \ OpenSSL的"   sha1 -binary |" C:\ OpenSSL \ bin \ openssl" BASE64

答案 3 :(得分:0)

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

它将要求您输入密码,然后您将获得哈希键

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

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

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

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