为什么 keytool 生成不同的 facebook androiddebugkey 哈希?
Why keytool is generating different facebook androiddebugkey hash?
我正在创建 Android 使用 Facebook 登录 SDK 的应用程序。
我想生成调试密钥哈希。在 Facebook 网站上,我找到了这个命令:
keytool -exportcert -alias androiddebugkey -keystore
%HOMEPATH%.android\debug.keystore | openssl sha1 -binary | openssl
base64
我修改了此命令以在我的计算机上运行:
keytool -exportcert -alias androiddebugkey -keystore
C:\Users\redio\.android\debug.keystore | "C:\OpenSSL\bin\openssl" sha1
-binary |"C:\OpenSSL\bin\openssl" base64
接下来我输入密码:android
此命令生成此哈希值:QUhvjKstiP5gc7hPEzwF89mwHws=
然后我将它粘贴到 facebook 开发者控制台
并且 facebook 仍然说密钥哈希无效。我知道我可以从警告消息中复制密钥哈希,并将其粘贴到 facebook 开发人员控制台中。但我的问题是为什么 keytool 生成错误的密钥散列?
我在使用 keytool 生成有效散列时也遇到了很多问题,但我实现了下面找到的方法,并且能够注销有效散列。代码的确切来源有点不清楚,但 this blog post 是一个很好的猜测。
public static String printKeyHash(Activity context) {
PackageInfo packageInfo;
String key = null;
try {
//getting application package name, as defined in manifest
String packageName = context.getApplicationContext().getPackageName();
//Retriving package info
packageInfo = context.getPackageManager().getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);
Log.e("Package Name=", context.getApplicationContext().getPackageName());
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
key = new String(Base64.encode(md.digest(), 0));
// String key = new String(Base64.encodeBytes(md.digest()));
Log.e("Key Hash=", key);
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
}
catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}
return key;
}
我正在创建 Android 使用 Facebook 登录 SDK 的应用程序。
我想生成调试密钥哈希。在 Facebook 网站上,我找到了这个命令:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.android\debug.keystore | openssl sha1 -binary | openssl base64
我修改了此命令以在我的计算机上运行:
keytool -exportcert -alias androiddebugkey -keystore C:\Users\redio\.android\debug.keystore | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
接下来我输入密码:android
此命令生成此哈希值:QUhvjKstiP5gc7hPEzwF89mwHws=
然后我将它粘贴到 facebook 开发者控制台 并且 facebook 仍然说密钥哈希无效。我知道我可以从警告消息中复制密钥哈希,并将其粘贴到 facebook 开发人员控制台中。但我的问题是为什么 keytool 生成错误的密钥散列?
我在使用 keytool 生成有效散列时也遇到了很多问题,但我实现了下面找到的方法,并且能够注销有效散列。代码的确切来源有点不清楚,但 this blog post 是一个很好的猜测。
public static String printKeyHash(Activity context) {
PackageInfo packageInfo;
String key = null;
try {
//getting application package name, as defined in manifest
String packageName = context.getApplicationContext().getPackageName();
//Retriving package info
packageInfo = context.getPackageManager().getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);
Log.e("Package Name=", context.getApplicationContext().getPackageName());
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
key = new String(Base64.encode(md.digest(), 0));
// String key = new String(Base64.encodeBytes(md.digest()));
Log.e("Key Hash=", key);
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
}
catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}
return key;
}