Facebook Android生成密钥哈希
-
24-10-2019 - |
题
尝试创建一个使用Facebook集成的Android应用程序,我已经进入了您必须生成键哈希文件的文档中的一部分,它指定运行以下代码
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端运行此操作时,我会发现密钥库篡改或密码不正确的错误,
我只想生成我的钥匙哈希
谁能指向正确的方向?
解决方案
在〜/.android/debug.keystore(在Linux和Mac OS X上)下删除您的调试证书;该目录类似于Windows上的%userhome%/。android。
然后,当您下次尝试构建调试软件包时,Eclipse插件应生成新证书。
让我知道这是否有效。
其他提示
为了生成密钥哈希,您需要遵循一些简单的步骤。
1)下载openssl来自: 这里。
2)做一个 Openssl 文件夹输入 C 驾驶
3)将zip文件提取到此 Openssl 创建的文件夹 C 驾驶。
4)复制文件 debug.keystore 从 。安卓 在我的情况下(C: Users System.android)中的文件夹并在我的情况下粘贴到JDK bin文件夹中(C: Program Files Java JDK1.6.0_05 bin)
5) 打开命令提示 并在我的情况下给出JDK bin文件夹的路径(c: program文件 java jdk1.6.0_05 bin)。
6)复制以下代码并点击输入
Keytool -exportcert -Alias androidDebugkey -Keystore debug.keystore> c: openssl bin 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)你会得到 debug_sha.txt 在openssl bin文件夹中
13)再次复制遵循代码和粘贴
openssl base64 -in debug_sha.txt> debug_base64.txt
14)你会得到 debug_base64.txt 在openssl bin文件夹中
15)开放 debug_base64.txt 文件这是您的密钥哈希。
更新的答案(通过代码生成)更简单的方法:
根据我的经验,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
用您自己的软件包名称(subtest.xml中的软件包名称)替换com.facebook.samples.loginhowto。
官方链接 - https://developers.facebook.com/docs/android/login-with-facebook/ (请参阅页面的底部)
旧答案(使用OpenSSL生成钥匙扣)
- 要生成签名,您需要在PC上安装OpenSSL。如果您没有下载openssl 从这里
- 在C:创建
openssl
文件夹 - 将下载的openssl zip文件的内容提取到
openssl
文件夹输入C:
驾驶 - 打开命令提示
- 搬去
bin
的openssl
IEC:\openssl\bin
在命令提示中 运行以下命令以生成钥匙扣。在生成hashkey时,应该询问您的密码。
KEYTOOL -EXPORTCERT -ALIAS ANDROIDDEBUGKEY -KEYSTORE“ C: users anhsirk.android debug.keystore” | openssl sha1 -binary | OpenSSL base64
笔记: :在上面的代码中指出,您需要给予 您通往用户的路 (即,就我而言,是c: users anhsirk,您只需要为用户帐户更改此内容即可。
将密码称为 安卓
. 。如果不要求密码,您的密钥库路径不正确。
如果一切正常,它应该为您提供下面的hashkey。
可以通过添加以下代码来敬酒适当的键哈希(如果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
I.为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创建关键哈希版本
- 下载 OpenSSL-0.9.8E_X64
- 在C驱动器中制作OpenSSL文件夹
- 将zip文件提取到OpenSSL文件夹中
- 开始 - >运行:CMD(按Enter)
- (按)CD C: Program Files Java JDK1.6.0_45 bin。注意:c: program文件 java jdk1.6.0_45 bin:是计算机中的JDK文件夹的路径
(按)KEYTOOL -EXPORTCERT -ALIAS GCI -KEYSTORE D:文件夹 keystorerelease | C: openssl bin openssl sha1 -binary | C: openssl bin openssl base64。注意:d:文件夹 keystoreRelease:是通往钥匙的路径
输入密钥库密码:这是您的寄存器keystorerelease时的密码。
然后,您将拥有一个钥匙哈希:jdehabcdiqedwayz5ow4sjsxlsw =
登录Facebook。访问管理应用程序。粘贴键哈希到您的应用程序上的developer.facebook.com
生成哈希密钥的最简单方法。
要求: SHA1密钥
您可以通过运行找到SHA1密钥 签字报告
请参阅下图图。
运行文件后,将生成输出所需的SHA1密钥。
然后又有了http://tomeko.net/online_tools/hex_to_base64.php
并粘贴您的sha1键
最后,您将获得所需的hashkey。
解决此问题的最简单解决方案:
我已经有两个月了这个问题。我的关键散装一直在呼plod9。今天,我终于找到了一个简单的解决方案:
步骤1:
在手机上安装您从Facebook开发人员页面下载的Facebook SDK。不要安装普通的Facebook应用程序。确保您可以登录Facebook。然后注销。
第2步:
将应用程序作为APK导出您的应用程序,就像将其上传到PlayStore时一样。
步骤3:
通过USB电缆或USB棒将APK文件放在手机上。
第4步:
使用文件管理器安装您的应用程序: 例子
步骤5:
启动您的应用程序并尝试与Facebook登录。对话框将打开并告诉您:“钥匙yourhashkey尚未在Facebook开发人员控制台中找到”
步骤6:
写下钥匙。
步骤7:
将其放入您的Facebook开发人员控制台并保存。现在你完成了。使用早期使用的密钥库发布的任何下载您的应用程序的人都可以登录到Facebook。
享受
如果您要发布,请使用用于导出应用程序的密钥库,而不是debug.keystore。
调试证书的密码是Android,而不是Android
最后 :)
这里我的故事:
设置布局后,将此代码添加到您的主要活动中。
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更改为您的包装名称!
- 签署您的应用程序(Android Tools->导出签名应用程序)
- 在您的主要活动中,您从2个选项粘贴代码,在布局中创建文本视图,使用ID TextString
- 不按两行的方式进行评论,您的符号代码将设置为TextView 6 Wuolia,您有哈希,在手机上安装应用程序!!!并检查您的哈希键!
- 现在,当它可见时,请访问您创建的Facebook应用程序,然后将其添加到[键哈希]中
- 请注意,您的软件包名称应与[钥匙哈希]下的Facebook [软件包名称]相同
- 祝你今天过得愉快 :)
为Facebook生成的一行解决方案
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
为了生成发布键哈希,您需要遵循一些简单的步骤。
1)下载 Openssl
2)在C驱动器中制作OpenSSL文件夹
3)将zip文件提取到C驱动器中创建的此OPENSL文件夹中。
4)在我的情况下(c: users system.android),从.android文件夹中复制文件debug.keystore,然后在我的情况下粘贴到jdk bin文件夹中(c: program files java jdk1.6.0_05 bin)
5)打开命令提示符,并在我的情况下给出JDK bin文件夹的路径(c: program文件 java jdk1.7.0_40 bin)。
6)复制以下代码并点击输入
KEYTOOL -EXPORTCERT -ALIAS ABCD -KEYSTORE D: Projects MyAppFolder keystore.txt | c: openssl bin openssl sha1-二进制| c: openssl bin openssl base64 ex -keytool -exportcert -alias(您的sing apk alias lias name ins exter在这里输入,就像我的符号apk alian名称abcd as abcd)-Keystore -keystore“ apk apk生成的apk apk apk apk apt apk apth tere keystore apth exter en emer” | “ openssl bin文件夹路径在此处输入” sha1-二进制| “ openssl bin文件夹路径在此处输入” base64
7)现在您需要输入密码,密码=(在此处输入符号密钥库密码)
8)您得到了用于释放应用程序键哈希的密钥库
即使这个线程很旧,但我想分享我的经验(最近开始与Facebook合作),这在我看来是直截了当的:
- 从链接bellow下载OpenSSL:https://code.google.com/p/openssl-for-windows/downloads/list
- 将其解压缩到本地驱动器(例如C: openssl)
要获取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键入Android作为密码。
而已!您将获得28个字符的长键。干杯!
使用相同的过程获取发布键。只需用以下命令替换命令,然后使用您的释放密钥别名即可。
keytool -exportcert -Alias your_release_key_alias -keystore your_release_key_key_path | “ openssl.exe的路径” 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
关于该主题的很棒的博客文章
从.p12键提取键哈希
- 打开终端或命令行,并导航到您的.p12键所在的位置。
- 键入:“ KEYTOOL -V -LIST -LIST -KEYSTORE MYCERT.P12 -STORETYPE PKCS12”其中mycert.p12是您的.p12键的文件名。
- 输入密钥库密码(导出.p12键时使用的密码)。 4。复制SHA1指纹签名字节文本。
- 需要SHA1指纹签名的字节来编写“ sha1.bin”文件。您可以使用十六进制编辑器粘贴复制的字节。之后,将文件保存为“ sha1.bin”。
- 再次打开终端,然后输入:“ openssl base64 -in sha1.bin -out base64.txt”。
- 由此产生的“ base64.txt”将包含Facebook所需的关键哈希。
MAC的出色而简单的十六进制编辑器:六边形
OpenSSL应该在Mac上预装,这是Windows版本的链接。
尝试传递密钥的密码并存储作为命令的一部分
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
我能够在这里使用一些解决方案执行请求的任务,但是想着自己,男孩很愚蠢……为什么不编写一个小的Java代码来执行此操作并将其包装到罐子中,所以我做到了。 ..
一个 链接下载 罐子
在Windows 8上工作...没有尝试任何其他操作系统。
大家好,这是我的故事,我的签名如何有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();
}
**从您的on Create methode调用funcation getappkeyhash(),如果您想要签名的哈希,然后进行签名构建安装签名构建和运行,您将在对话框中获得哈希键签名APK **
如果您的密码= Android是错误的,请将您的PC密码放在上面,对我有用。
为了生成钥匙扣,请尝试此链接 这里
唯一对我有用的是使用密码 android
. 。为什么在那里的任何指南中都没有提及?
在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){
}