尝试使用Facebook集成创建一个Android应用程序,我已经到了必须生成密钥哈希文件的文档中的部分,它指定运行以下代码
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端中运行此操作时,我收到错误的Keystore被篡改或密码错误,
我只想生成我的Key Hash
有人能指出我正确的方向吗?
答案 0 :(得分:276)
为了生成密钥哈希,您需要执行一些简单的步骤。
1)从here.
下载Openssl2)在 C 驱动器中创建 openssl 文件夹
3)将Zip文件解压缩到 C 云端硬盘中创建的 openssl 文件夹中。
4)从我的案例中的 .android 文件夹中复制文件 debug.keystore (C:\ Users \ SYSTEM.android)并粘贴到我的JDK bin文件夹中case(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)
5)打开命令提示符并在我的情况下给出JDK Bin文件夹的路径(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)。
6)复制以下代码并按Enter键
keytool -exportcert -alias androiddebugkey -keystore debug.keystore> C:\ OpenSSL的\ BIN \ DEBUG.TXT
7)现在你需要输入密码,密码= android。
8)如果您在 openssl Bin文件夹中看到,您将收到一个名为 debug.txt 的文件
9)现在要么可以重新启动命令提示符,要么使用现有的命令提示符
10)返回C盘并给出openssl Bin 文件夹的路径
11)复制以下代码并粘贴
openssl sha1 -binary debug.txt> debug_sha.txt
12)你将在openssl bin文件夹中获得 debug_sha.txt
13)再次复制以下代码并粘贴
openssl base64 -in debug_sha.txt> debug_base64.txt
14)你将在openssl bin文件夹中获得 debug_base64.txt
15)打开 debug_base64.txt 文件这是你的密钥哈希。
答案 1 :(得分:146)
根据我的经验,openssl总是很麻烦,我尝试了facebook建议的第二种方法。这太好了。这是获取哈希密钥的最佳方法。
第二个选项是打印发送到Facebook的密钥哈希并使用该值。对主活动中的onCreate()方法进行以下更改:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.loginhowto",
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));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
...other operations
}//end of onCreate
将com.facebook.samples.loginhowto替换为您自己的包名称(Manifest.xml中的包名称)。
官方链接 - https://developers.facebook.com/docs/android/login-with-facebook/(请参阅页面底部)
openssl
文件夹openssl
drive C:
文件夹
bin
的{{1}},即openssl
运行以下命令以生成您的keyhash。生成hashkey时应该问你密码。
keytool -exportcert -alias androiddebugkey -keystore“C:\ Users \ Anhsirk.android \ debug.keystore”| openssl sha1 -binary | openssl base64
注意:在上面的代码注释中,您需要提供您的用户路径(即在我的情况下,它是C:\ Users \ Anhsirk,您只需需要为您的用户帐户更改此内容。
将密码设为 android
。如果没有要求输入密码,则密钥库路径不正确。
如果一切正常,它应该给你下面的哈希键。
答案 2 :(得分:20)
删除〜/ .android / debug.keystore下的调试证书(在Linux和Mac OS X上);该目录类似于Windows上的%USERHOME%/。android。
然后,当您下次尝试构建调试包时,Eclipse插件应生成新证书。
如果有效,请告诉我。
答案 3 :(得分:14)
可以从应用程序本身获取正确的密钥,方法是添加以下代码以覆盖正确的密钥哈希(如果是Facebook SDK 3.0,则可以使用)
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
将com.package.mypackage替换为您的包名
答案 4 :(得分:12)
<强>予。为facebook创建密钥哈希调试
添加代码以打印出facebook的密钥哈希
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.google.shoppingvn", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("KeyHash:",
Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
<强> II。为facebook创建密钥哈希发布
(按)keytool -exportcert -alias gci -keystore D:\ folder \ keystorerelease | C:\ openssl \ bin \ openssl sha1 -binary | C:\ openssl \ bin \ openssl base64。注意:D:\ folder \ keystorerelease:是keystorerelease的路径
输入密钥库密码:这是您的注册密钥库释放时的密码。
然后你将有一个密钥哈希:jDehABCDIQEDWAYz5Ow4sjsxLSw =
登录facebook。访问管理应用程序。将密钥哈希粘贴到developers.facebook.com上的应用程序
答案 5 :(得分:9)
解决这个问题的最简单方法:
我已经有这个问题已经有两个月了。我的关键哈希值已经达到了9个。今天我终于找到了简单的解决方案:
第1步:
在手机上安装从Facebook开发者页面下载的facebook sdk。不要安装正常的Facebook应用程序。确保您可以登录Facebook。然后退出。
第2步:
将您的最终发布密钥导出为apk,就像将其上传到Play商店一样。
第3步:
通过USB线或USB棒将Apk文件放在手机上。
第4步:
使用文件管理器安装您的应用:Example
第5步:
启动您的应用并尝试使用Facebook登录。将打开一个对话框,告诉您:“在Facebook开发者控制台中找不到密钥YOURHASHKEY”
第6步:
记下钥匙。
第7步:
将其放入您的Facebook开发者控制台并保存。现在你完成了。下载使用以前使用的密钥库发布的应用程序的任何人都可以登录Facebook。
享受
答案 6 :(得分:7)
如果您要发布,请使用您用于导出应用程序的密钥库而不是debug.keystore。
答案 7 :(得分:6)
调试证书的密码是android而不是Android
答案 8 :(得分:6)
最后:)
这是我的故事:
设置布局后,将此代码添加到主活动中。
try {
PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
//textInstructionsOrLink = (TextView)findViewById(R.id.textstring);
//textInstructionsOrLink.setText(sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
Log.d("nope","nope");
} catch (NoSuchAlgorithmException e) {
}
将PROJECTNAME更改为您的包裹名称!
答案 9 :(得分:5)
为facebook生成的一行解决方案
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
答案 10 :(得分:4)
要生成发布密钥哈希,您需要执行一些简单的步骤。
1)下载Openssl
2)在C盘中制作一个openssl文件夹
3)将Zip文件解压缩到在C Drive中创建的这个openssl文件夹中。
4)从我的案例中的.android文件夹中复制File debug.keystore(C:\ Users \ SYSTEM.android)并粘贴到我的案例中的JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05) \ bin)中
5)打开命令提示符并在我的例子中给出JDK Bin文件夹的路径(C:\ Program Files \ Java \ jdk1.7.0_40 \ bin)。
6)复制以下代码并按Enter键
keytool -exportcert -alias abcd-keystore D:\ Projects \ MyAppFolder \ keystore.txt | C:\ openssl \ bin \ openssl sha1 - binary | C:\ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias(你的唱歌apk别名在这里输入就像我的签名apk alian名字是abcd)-keystore&#34;签名apk生成的keystore apth在这里输入&#34; | &#34; openssl bin文件夹路径输入此处&#34; sha1 - 二进制| &#34; openssl bin文件夹路径输入此处&#34; BASE64
7)现在您需要输入密码,密码=(在此输入您的签名密钥库密码)
8)你有用于发布应用密钥哈希的密钥库
答案 11 :(得分:3)
即使这个帖子已经老了,但我想分享一下我的经历(最近开始与facebook合作),这在我看来很直接:
要获取facebook集成的开发键,请在Windows命令行中使用以下命令:
keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%.android \ debug.keystore | “C:\ openssl \ bin \ openssl.exe”sha1 -binary | “C:\ openssl \ bin \ openssl.exe”base64
注意!:请替换openssl.exe的路径(在此示例中为 “C:\ openssl \ bin \ openssl.exe”)带有您自己的安装路径。
输入密钥库密码:android
键入android作为密码,如上所示。
多数民众赞成!您将获得一个28个字符的长键。干杯!
使用相同的步骤获取Release键。只需使用以下命令替换该命令,并使用您的发布密钥别名。
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | “PATH FOR openssl.exe”sha1 -binary | openssl base64
答案 12 :(得分:2)
尝试传递密钥的密码并将其存储为命令的一部分
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
答案 13 :(得分:2)
关于这个主题的精彩博文
从.p12键中提取Key Hash
Mac的简单十六进制编辑器:HexFiend
OpenSSL应该预先安装在mac上,这里是Windows版本的链接。
答案 14 :(得分:2)
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
答案 15 :(得分:2)
生成哈希密钥的最简单方法。
要求: SHA1键
您可以通过运行 signingReport
找到SHA1密钥。请参考下图。
运行文件后,将生成包含必需的sha1键的输出。
然后转到 http://tomeko.net/online_tools/hex_to_base64.php
并粘贴您的sha1键
最后,您将获得Required HashKey。
答案 16 :(得分:1)
我能够用这里的一些解决方案执行所请求的任务,但是想到自己,男孩是愚蠢的......为什么不写一个小的Java代码来做这个并将它打包到一个Jar中,所以我做了......
一个link to download Jar
适用于Windows 8 ...没有尝试任何其他操作系统。
答案 17 :(得分:1)
大家好,我的故事如何签名有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()如果你想要签名哈希然后使签名的build install签名构建并运行你将在对话框中获得哈希键然后只需记下它并在facebook开发帐户上更新它并注释该功能并制作另一个签名APK **
答案 18 :(得分:1)
如果你的密码= android是错误的,那就把你的电脑密码放在适合我的地方。
要生成keyHash,请尝试此链接 Here
答案 19 :(得分:0)
唯一适合我的是使用密码android
。为什么在那里没有提到任何指南?
答案 20 :(得分:0)
在kotlin中将此用于日志中的打印密钥哈希
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){
}