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
运行这在任何
我正在使用以下命令为 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
运行这在任何