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

我正在使用以下命令为Android的Facebook应用程序控制台生成密钥散列

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

正如Facebook开发者所说的SDK帮助

根据帮助页面和开发人员控制台,密钥哈希应该是28个字符长,但是密钥工具正在生成32个字符长的密钥。

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

为android生成。

编辑

根据@ Shreyash-mashru的build议,我使用下面的代码来获得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 …

Solutions Collecting From Web of "Keytool生成32个字符的长键哈希而不是28个"

也遇到这个问题,对我来说,我正在使用Windows PowerShell,并保持生成一个32个字符的关键。 当我切换到普通的旧cmd它按预期工作。

希望这个答案还不算太晚(我知道这个问题已经过了一年了,但是我从谷歌search的第一个结果来到这里)。

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

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

要么

popup一个JavaScript控制台,并使用:

 btoa(atob(hashString).slice(0, -2)) 

其中“hashString”是你的32个字符的散列。

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

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

我遇到了同样的问题。 这与使用我的现有版本的OpenSSL(64位)有关。 我从这里下载了32位版本,并将其安装到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