试图创建一个与 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
当我在终端中运行它时,我收到密钥库被篡改或密码不正确的错误,
我只想生成我的密钥哈希
谁能指出我正确的方向?
为了生成密钥哈希,您需要遵循一些简单的步骤。
1) 从此处下载 Openssl。
2)在C盘创建一个openssl文件夹
3) 将 Zip 文件解压到C盘中创建的openssl文件夹中。
4)在我的情况下从.android文件夹(C:\ Users \ SYSTEM.android)复制文件debug.keystore并在我的情况下粘贴到JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)
5)打开命令提示符并在我的例子中给出 JDK Bin 文件夹的路径(C:\Program Files\Java\jdk1.6.0_05\bin)。
6) 复制以下代码并回车
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文件这是您的密钥哈希。
根据我的经验,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
夹中C:
bin
下移动到openssl
ieC:\openssl\bin
运行以下命令以生成您的密钥哈希。在生成 hashkey 时,它应该询问您的密码。
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Anhsirk.android\debug.keystore" | openssl sha1 -二进制 | openssl base64
注意:在上面的代码中请注意,您需要提供您的用户路径(即在我的情况下它是 C:\Users\Anhsirk ,您只需要为您的用户帐户更改它。
输入密码为android
. 如果它不要求输入密码,则您的密钥库路径不正确。
如果一切正常,它应该给你下面的哈希键。
生成哈希键的最简单方法。
要求: SHA1 密钥
您可以通过两种方式从您的密钥库文件中获取 SHA1 密钥
1)找到您的密钥库文件,在该位置打开命令提示符,然后使用下面提到的命令
keytool -list -v -keystore {keystore_name} -alias {alias_name}
然后输入您的密码,然后它将返回 md5、sha1 和 sha256 密钥。
或者
2)通过运行signingReport
参考下图。
运行文件后,将生成包含所需 sha1 密钥的输出。
获得所需的 SHA1 密钥后
然后转到
http://tomeko.net/online_tools/hex_to_base64.php
并粘贴您的 sha1 密钥
最后你会得到Required HashKey,你可以用它在facebook上申请。
删除 ~/.android/debug.keystore 下的调试证书(在 Linux 和 Mac OS X 上);该目录类似于 Windows 上的 %USERHOME%/.android。
当您下次尝试构建调试包时,Eclipse 插件应该会生成一个新证书。
让我知道这是否有效。
可以通过添加以下代码来从应用程序本身获取正确的密钥,以烘烤正确的密钥哈希(在 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
一、为facebook创建key hash debug
添加代码以打印出 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) {
}
二、为 facebook 创建密钥散列版本
在 C 盘创建一个 openssl 文件夹
将 Zip 文件解压到 openssl 文件夹
开始 -> 运行:cmd(按回车键)
(按)cd C:\Program Files\Java\jdk1.6.0_45\bin。注意:C:\Program Files\Java\jdk1.6.0_45\bin: 是您计算机中 jdk 文件夹的路径
(按)keytool -exportcert -alias gci -keystore D:\folder\keystorerelease | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl base64。注意:D:\folder\keystorerelease: 是您的 keystorerelease 的路径
输入密钥库密码:这是您注册密钥库释放时的密码。
然后你将有一个密钥哈希:jDehABCDIQEDWAYz5Ow4sjsxLSw=
登录脸书。访问管理应用程序。将密钥哈希粘贴到您在 developers.facebook.com 上的应用
针对这个问题的最简单的解决方案:
我有这个问题两个月了。我的密钥哈希值一直高达 9。今天我终于找到了简单的解决方案:
第1步:
在手机上安装从 facebook 开发者页面下载的 facebook sdk。不要安装普通的 facebook 应用程序。确保您可以登录 facebook。然后登出。
第2步:
使用您的最终发布密钥将您的应用导出为 apk,就像您将其上传到 Playstore 时一样。
第 3 步:
通过 USB 数据线或 USB 棒将 Apk 文件放在手机上。
第4步:
使用文件管理器安装您的应用程序:示例
第 5 步:
启动您的应用程序并尝试使用 facebook 登录。将打开一个对话框并告诉您:“在 facebook 开发人员控制台中找不到密钥 YOURHASHKEY”
第 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 更改为您的包名称!
为 facebook 生成的一条线解决方案
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
为了生成发布密钥哈希,您需要遵循一些简单的步骤。
1) 下载OpenSSL
2)在C盘创建一个openssl文件夹
3) 将 Zip 文件解压到 C 盘中创建的 openssl 文件夹中。
4)在我的情况下从.android文件夹(C:\ Users \ SYSTEM.android)复制文件debug.keystore并在我的情况下粘贴到JDK bin文件夹(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)
5) 打开命令提示符并在我的例子中给出 JDK Bin 文件夹的路径(C:\Program Files\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 别名在此处输入,就像我的签名 apk 别名是 abcd )-keystore "已签名 apk 生成的密钥库 apth 在此处输入" | “openssl bin 文件夹路径在此处输入” sha1 - 二进制 | “openssl bin 文件夹路径在此处输入”base64
7)现在你需要输入密码,Password =(在这里输入你的签名密钥库密码)
8)你有用于发布应用程序密钥哈希的密钥库
尽管这个线程很旧,但我想分享我的经验(最近开始使用 facebook),这在我看来是直截了当的:
要获取 facebook 集成的 Development 密钥,请在 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 | “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 密钥中提取密钥哈希
适用于 mac 的伟大而简单的十六进制编辑器:HexFiend
Mac 上应该预装 OpenSSL,这里是 Windows 版本的链接。
尝试传递密钥的密码并将其存储为命令的一部分
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
我可以使用这里的一些解决方案来执行所要求的任务,但我想,这孩子真傻……为什么不编写一个小的 Java 代码来执行此操作并将其打包到一个 Jar 中,所以我做到了。 ..
下载Jar的链接
适用于 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();
}
**如果您想要签名哈希,请从您的 oncreate 方法调用函数 getAppKeyHash() 然后进行签名构建安装签名构建并运行您将在对话框中获得哈希密钥然后只需记下它并在 facebook 开发帐户上更新它并评论该函数并制作另一个已签名的 APK **
如果您的密码 = android 错误,那么将您的电脑密码输入它对我有用。
并为生成 keyHash 试试这个链接Here
唯一对我有用的是使用密码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){
}