我正在尝试创建一个集成Facebook的Android应用程序,我已经看了文档中生成密钥散列文件的部分,它指定运行以下代码:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端中运行时,出现密钥库篡改或密码不正确的错误,
我只想生成我的键哈希
有人能指点我正确的方向吗?
我正在尝试创建一个集成Facebook的Android应用程序,我已经看了文档中生成密钥散列文件的部分,它指定运行以下代码:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端中运行时,出现密钥库篡改或密码不正确的错误,
我只想生成我的键哈希
有人能指点我正确的方向吗?
public String hashkey(Context context) {
String keyhash = "";
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
keyhash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
return keyhash;
}
keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64
尝试将密钥和存储的密码作为命令的一部分传递
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
关于这个主题的博客文章很棒
从.p12密钥中提取密钥哈希
适用于Mac的出色且简单的十六进制编辑器:HexFiend
OpenSSL应该预装在Mac上,这里是Windows版本的链接。
AppEntry
。 - Alexander Farber大家好,这是我的故事,讲述我如何获得 Facebook 的签名密钥。
首先,你需要将以下两个方法复制到你的第一个类中:
private void getAppKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
System.out.println("HASH " + something);
showSignedHashKey(something);
}
} catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
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());
}
}
public void showSignedHashKey(String hashKey) {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Note Signed Hash Key");
adb.setMessage(hashKey);
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
adb.show();
}
如果您想获取签名哈希值,请从onCreate方法中调用getAppKeyHash()函数,然后制作签名版本并安装它,并运行它,您将在对话框中获得哈希密钥,只需记录下来并在Facebook开发者账户上更新它,然后注释该函数并创建另一个签名APK。
在 Kotlin 中使用以下代码以将 key hash 打印在日志中:
try {
val info = context.getPackageManager().getPackageInfo(context.packageName,
PackageManager.GET_SIGNATURES);
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
}
}catch (e:Exception){
}
唯一有效的方法是使用密码android
。为什么任何指南都没有提到这一点呢?