尝试创建与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
当我在终端上运行此命令时,我收到密钥库被篡改或密码错误的错误消息,
我只想生成我的密钥哈希
谁能指出我正确的方向?
Answers:
删除〜/ .android / debug.keystore下的调试证书(在Linux和Mac OS X上);该目录类似于Windows上的%USERHOME%/。android。
当您下次尝试构建调试包时,Eclipse插件应会生成一个新证书。
让我知道是否可行。
为了生成密钥哈希,您需要遵循一些简单的步骤。
1)从以下位置下载Openssl 。
2)在C盘中创建一个openssl文件夹
3)将Zip文件解压缩到在C驱动器中创建的openssl文件夹中。
4)在我的情况下(.C:\ Users \ SYSTEM.android)从.android文件夹复制文件debug.keystore,并在我的情况下(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)粘贴到JDK 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)现在,您需要输入password,密码= 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-在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
用您自己的包名称(Manifest.xml中的包名称)替换com.facebook.samples.loginhowto。
官方链接- //developers.facebook.com/docs/android/login-with-facebook/(请参阅页面底部)
openssl
文件夹openssl
C:
驱动器的夹中bin
的openssl
即C:\openssl\bin
在命令提示运行以下命令来生成您的密钥哈希。在生成哈希密钥时,它应该询问您密码。
keytool -exportcert -alias androiddebugkey -keystore“ C:\ Users \ Anhsirk.android \ debug.keystore” | openssl sha1 -binary | 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。
可以通过添加以下代码来烘烤适当的密钥哈希值,从而从应用程序本身获取正确的密钥(在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) {
}
二。为Facebook创建密钥哈希发布
在C盘中创建一个openssl文件夹
将Zip文件解压缩到openssl文件夹中
开始->运行:cmd(按Enter)
(按)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 =
登录facebook。访问管理应用程序。将密钥哈希值粘贴到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。
请享用
最后 :)
这是我的故事:
设置布局后,将此代码添加到您的主要活动中。
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更改为您的包裹名称!
为了生成发布密钥哈希,您需要遵循一些简单的步骤。
1)下载Openssl
2)在C盘中创建一个openssl文件夹
3)将Zip文件解压缩到在C驱动器中创建的openssl文件夹中。
4)在我的情况下(.C:\ Users \ SYSTEM.android)从.android文件夹复制文件debug.keystore,并在我的情况下(C:\ Program Files \ Java \ jdk1.6.0_05 \ bin)粘贴到JDK 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-二进制| C:\ openssl \ bin \ openssl base64 ex-keytool -exportcert -alias(您输入的apk别名输入此处,就像我的登录名apk名称是abcd一样)-keystore“已签名的apk生成的keystore apth输入此处” “ openssl bin文件夹路径在此处输入” sha1-二进制| “ openssl bin文件夹路径在此处输入” base64
7)现在您需要输入密码,密码=(在此处输入您的登录密钥库密码)
8)您有用于发布应用程序密钥哈希的密钥库
即使此线程很旧,但我还是想分享一下我的经验(最近开始使用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 | sha1 -binary |“ openssl.exe的路径” | 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版本的链接。
AppEntry
我可以使用这里的一些解决方案来执行请求的任务,但是我心想,这个笨蛋……为什么不编写一个小的Java代码来完成此任务并将其打包到Jar中,所以我做到了。 ..
一个链接下载的Jar
可在Windows 8上运行...没有尝试任何其他操作系统。
大家好,我的故事我如何签到拥有Facebook的密钥
首先,您只需在第一堂课中复制这2个方法
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方法调用funcation getAppKeyHash(),然后执行签名构建安装签名构建并运行,您将在对话框中获取哈希密钥,然后将其记录下来并在facebook dev帐户上对其进行更新,并对该函数进行注释并制作另一个签名的APK **
如果您的密码= android错误,那么请输入您的PC密码对我有用。
而对于产生keyHash尝试此链接这里
在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){
}