我根本不理解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。虽然我一直得到错误openssl不被识别为内部或外部命令。问题是即使我可以让这个工作,我会做什么以及之后做什么?
答案 0 :(得分:199)
以下是您需要做的事情 -
从Code下载openSSl 提取它。在C:/中创建一个文件夹-OpenSSL,并在此复制提取的代码。
检测debug.keystore文件路径。如果你没找到,那么在C:/中搜索并在下一步中使用命令中的Path。
检测您的keytool.exe路径并转到该dir / in命令提示符并在1行中运行此命令 -
$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
它会要求输入密码,放android
就这样。你会得到一个密钥哈希
答案 1 :(得分:137)
适用于Linux和Mac
打开终端:
用于调试版本
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
您将在“.android”文件夹中找到 debug.keystore 。复制并粘贴到桌面上并运行上面的命令。
发布版本
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注意:请确保在两种情况下都要求输入密码。如果它没有要求输入密码,则表示命令中出现了问题。 debug.keystore 的密码是“ android ”,对于发布,您必须输入在创建密钥库期间设置的密码
答案 2 :(得分:69)
请试试这个:
public static void printHashKey(Context pContext) {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
}
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "printHashKey()", e);
} catch (Exception e) {
Log.e(TAG, "printHashKey()", e);
}
}
答案 3 :(得分:47)
OpenSSL:如果未预装操作系统(例如,Windows未预装),则必须安装。如何安装取决于您的操作系统(对于Windows,请检查由coder_For_Life22提供的link)。
如果您在Windows上,最简单的方法就是将openssl.exe二进制文件复制到您的keytool路径。如果您不想这样做,则必须将其添加到PATH
环境变量中。然后执行docs中提供的命令。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
请注意-keystore
之后的参数指向调试密钥库。此位置还取决于您的操作系统。应该在以下某个位置:
如果您做的一切正确,系统会提示您输入密码。对于调试证书,这是android
。如果密码正确,控制台会打印一个哈希值(有点随机的字符和数字)。
将其复制到Facebook上应用偏好内的android key hash
字段中。要到达那里,请转到developers.facebook.com/apps,选择您的应用,转到Edit settings
然后向下滚动。之后,等待几分钟,直到更改生效。
答案 4 :(得分:21)
在本地计算机上生成密钥哈希,针对Android调试密钥库运行Java的keytool实用程序(应该在您的控制台路径上)。默认情况下,这是您家中的.android目录)。在OS X上,运行:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
在Windows上,使用: -
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
希望这会对你有所帮助
参考 - 开发者facebook网站
答案 5 :(得分:13)
也有一个简短的解决方案。只需在您的应用中运行:
generated_template
较长的一个不需要FB SDK(基于解决方案here):
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
结果应以“=”结尾。
答案 6 :(得分:12)
像我这样的人这里有完整的详细信息(适用于Windows)
1。根据您的系统32位或64位,下载OpenSSl第3或第4位(e会更好用)。
2. 在C目录中提取下载的zip
3。打开提取的文件夹到bin并复制路径,它应该是C:\openssl-0.9.8k_X64\bin\openssl
之类的东西(最后添加\ openssl)
4. (获取Jdk bin文件夹的路径,如果你知道如何,请忽略它)。
打开android studio~file~Project Structure(ctrl + alt + shift + s),在左侧面板中选择SDK位置,复制JDK位置并添加/ bin到它
因此,最终的JDK位置将类似于C:\Program Files\Android\Android Studio\jre\bin
我们正在使用此方法获取Jdk位置,因为您可能使用像我这样的嵌入式jdk
现在你有OpenSSl位置&amp; JDK位置
5. 现在我们需要调试密钥库位置,对于那个打开C~&gt;用户〜&gt; YourUserName~&gt; .android应该有一个文件名debug.keystore,现在复制路径位置,应该是像
这样的东西 C:\Users\Redman\.android\debug.keystore
6。现在打开命令提示符并输入命令
cd YourJDKLocationFromStep4
在我的情况下
cd "C:\Program Files\Android\Android Studio\jre\bin"
7。现在构建以下命令
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
在我的情况下,命令看起来像
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
现在在命令提示符下输入此命令,如果你做对了,你会被要求输入密码(密码是android)
Enter keystore password: android
就是这样,你将获得Key Hash,只需复制并使用它
对于签名的KeyHash,构造以下命令
keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
输入您的密钥库密码,如果您输入了错误的密码,它将提供错误的KeyHash
注意
如果出于某种原因,如果它在某个路径上出错,那么用双引号包装该路径。而且Windows power shell对我来说效果不好,我使用了git bash(或者使用命令提示符)。
例如
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
答案 7 :(得分:9)
适用于Windows:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.android \ debug.keystore | openssl sha1 -binary | OpenSSL的 BASE64
输入密码:android - &gt;按Enter键
复制生成的哈希密钥 - &gt;使用您的开发者帐户登录Facebook
转到您的Facebook应用程序 - &gt;设置 - &GT;在“键哈希”选项中粘贴哈希键 - >保存更改。
现在使用Facebook登录/分享等方式测试您的Android应用程序
答案 8 :(得分:6)
这就是我获得我的方式:
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
new AlertDialog.Builder(FriendActivity.this)
.setTitle(R.string.login_failed_dialog_title)
.setMessage(exception.getMessage())
.setPositiveButton(R.string.ok_button, null)
.show();
}
因此,当您尝试在没有密钥的情况下进入时,将发生异常。 Facebook将右键放入此例外。您需要做的就是复制它。
答案 9 :(得分:5)
从API 26开始,您可以在 KOTLIN 中使用以下代码生成哈希键,而无需Facebook SDK。
fun generateSSHKey(context: Context){
try {
val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.getEncoder().encode(md.digest()))
Log.i("AppLog", "key:$hashKey=")
}
} catch (e: Exception) {
Log.e("AppLog", "error:", e)
}
}
答案 10 :(得分:5)
答案 11 :(得分:3)
在您的应用中运行此功能:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");
或者这个:
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
然后查看日志。
结果应以“=”结尾。
答案 12 :(得分:3)
然后将openssl \ bin添加到路径系统变量:
我的电脑 - &gt;属性 - &gt;高级配置 - &gt;高级 - &gt;系统变量 - &gt;在系统变量下找到路径,并将其添加到其结尾: ; yourFullOpenSSLDir \ BIN
现在在你的jdk \ bin文件夹C:\ Program Files \ Java \ jdk1.8.0_40 \ bin上打开一个命令行(在windows上保持shift并右键单击 - &gt;在这里打开命令行)并使用:
keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64
并在提供密码后复制它生成的28个长度。
答案 13 :(得分:3)
简便方法
通过使用this website,可以通过将SHA1密钥转换为Facebook的哈希密钥来获取哈希密钥。
答案 14 :(得分:2)
您可以从https://console.developers.google.com/projectselector/apis/credentials获取所有指纹 并使用此Kotlin代码将其转换为keyhash:
fun main(args: Array<String>) {
listOf("<your_production_sha1_fingerprint>",
"<your_debug1_sha1_fingerprint>",
"<your_debug2_sha1_fingerprint>")
.map { it.split(":") }
.map { it.map { it.toInt(16).toByte() }.toByteArray() }
.map { String(Base64.getEncoder().encode(it)) }
.forEach { println(it) }
}
答案 15 :(得分:1)
我找到了最简单的工具,并且多次使用它,它完美地工作。看看它会有所帮助。
查看this答案了解详情。
答案 16 :(得分:1)
https://developers.facebook.com/docs/android/getting-started/
4.19.0-2017年1月25日
Facebook SDK
已修改
Facebook SDK现在在应用程序启动时自动初始化。在大多数情况下,不再需要手动调用FacebookSDK.sdkInitialize()。有关更多详细信息,请参见upgrade guide。
用于调试
try {
PackageInfo info = getPackageManager().getPackageInfo(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));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
答案 17 :(得分:1)
便捷->不要安装openssl->使用GIT BASH!
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
默认密码为“ android”
我们大多数人都安装了Git Bash,所以这是我最喜欢的方式。
答案 18 :(得分:1)
如果您已经将应用上传到Play商店,则可以按以下方式生成哈希密钥:
1)转到版本管理here
2)选择发布管理->应用签名
3)您可以以十六进制格式的应用签名证书看到SHA1密钥。
4)以十六进制格式复制SHA1并将其转换为base64格式,您可以使用this链接来执行此操作,而无需使用SHA1:十六进制的一部分。
5)转到Facebook开发者控制台,并在设置->基本->密钥哈希中添加密钥(转换为base 64后)。
答案 19 :(得分:1)
只需在您的 OnCreateView 或 OnStart 活动中运行该代码,此函数就会为您返回开发密钥哈希。
private String generateKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = (MessageDigest.getInstance("SHA"));
md.update(signature.toByteArray());
return new String(Base64.encode(md.digest(), 0));
}
}catch (Exception e) {
Log.e("exception", e.toString());
}
return "key hash not found";
}
答案 20 :(得分:0)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
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) {
}
...
保存更改并重新运行示例。检查您的 logcat 输出是否有类似这样的消息:
<块引用>12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=
将密钥哈希保存在您的开发者资料中。重新运行示例并验证您是否可以成功登录。
答案 21 :(得分:0)
private fun generateKeyHash(): String? {try {
val info =packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
return String(Base64.encode(md.digest(), 0))
}
} catch (e: Exception) {
Log.e("exception", e.toString())
}
return "key hash not found"
}
答案 22 :(得分:0)
答案 23 :(得分:0)
我遇到了同样的问题,这就是我能够解决的方法
keytool -list -alias androiddebugkey -keystore <project_file\android\app\debug.keystore>
答案 24 :(得分:0)
如果openssl遇到问题,请遵循以下说明:
就这样
https://sourceforge.net/projects/openssl/files/latest/download
答案 25 :(得分:0)
keytool -exportcert -alias androiddebugkey -keystore“ C:\ Users ** Deepak **。android \ debug.keystore” | “ C:\ Users \ Deepak \ ssl \ bin \ openssl” sha1 -binary | “ C:\ Users \ Deepak \ ssl \ bin \ openssl” base64
2上面命令的更改 1.Deepak ===由您的系统用户名替换 2.C:\ Users \ Deepak \ ssl ===替换您的Open SSL路径
运行此命令并获得这样的输出
C:\ Users \ Deepak> keytool -exportcert -alias androiddebugkey -keystore“ C:\ Users \ D eepak.android \ debug.keystore“ |” C:\ Users \ Deepak \ ssl \ bin \ openssl“ sha1 -binary | “ C:\ Users \ Deepak \ ssl \ bin \ openssl” base64 输入密钥库密码:****** ga0RGNY ********************** =
答案 26 :(得分:0)
第1步 打开您的项目文件夹
第2步 打开您的项目文件夹/转到命令页面
示例:D:\ naveen \ project \ androidproject>
第3步将此行粘贴到cmd行
D:\ naveen \ project \ androidproject> keytool-列表-v -keystore C:\ Users \ admin.android/debug.keystore-alias androiddebugkey -storepass android -keypass android
第4步 只需更改您的C:\ Users \ admin ----->您的路径
uu得到 SHA1 值click this link,将您的SHA1值转换为HASH KEY
我100%确信此链接会对您有所帮助
答案 27 :(得分:0)
您只需在浏览器控制台中使用一行JavaScript即可将十六进制映射键转换为base64。在最新的浏览器中打开控制台(在Windows上为F12),粘贴代码,并替换Google Play在{下提供的 SHA-1
, SHA-256
十六进制地图{1}}> Release Managment
:
App signing
答案 28 :(得分:0)
这也将帮助新蜜蜂。
只需在@ coder_For_Life22的答案中添加更多详细信息即可。
如果这个答案对您有帮助,请不要忘记投票。它激励着我们。
为此,您必须已经知道应用程序的密钥库文件和密码的路径
对于此示例,请考虑将密钥存储在“ c:\ keystorekey \ new.jks”中
1.打开此页面https://code.google.com/archive/p/openssl-for-windows/downloads
2.根据Windows操作系统下载32或64位zip文件。
3.将下载的文件解压缩到任意位置,并记住路径。
4.对于此示例,我们认为您已将文件夹提取到下载文件夹中。
因此文件地址将为“ C:\ Users \ 0 \ Downloads \ openssl-0.9.8e_X64 \ bin \ openssl.exe”;
5.现在在键盘上按下Windows + r按钮。
6.这将打开运行框。
7.键入cmd,然后按 Ctrl + Shift + Enter 。
8.这将以管理员身份打开命令提示符。
9.在这里导航到Java的bin文件夹:
如果您使用Android Studio提供的jre,则会找到以下路径:
一种。打开android studio。
b。文件->项目结构
C。在左窗格中,单击“ SDK位置”
d。在右窗格中“ JDK位置”下方的是您的jre路径。
e。在此路径的末尾添加“ \ bin”,因为我们需要的文件“ keytool.exe”位于此文件夹中。
对于本示例,我认为您已单独安装了Java,以下是路径
“ C:\ Program Files \ Java \ jre-10.0.2 \ bin”
如果您已安装32位Java,它将位于
“ C:\ Program Files(x86)\ Java \ jre-10.0.2 \ bin”
10.现在具有上述路径,执行命令如下:
keytool -exportcert -alias androiddebugkey -keystore "c:\keystorekey\new.jks" | "C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary |"C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" base64
错误:
如果得到:
---
'keytool'无法识别为内部或外部命令
---
这意味着Java已安装在其他地方。
答案 29 :(得分:0)
答案 30 :(得分:0)
我遇到了同样的问题,我没有被要求输入密码,似乎我的密钥库文件路径错误。
实际上,如果keytool找不到你设置的密钥库,它会创建一个密钥库并给你错误的密钥,因为它没有使用正确的密钥库。
一般规则是,如果您没有被要求输入密码,那么您将生成错误的密钥。
答案 31 :(得分:0)
您可以使用此apk
1.first install the app from the Google play store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want