我完全不了解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。尽管我不断收到错误,但openssl无法识别为内部或外部命令。问题是,即使我可以解决这个问题,我该怎么办?以后怎么办?
我完全不了解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。尽管我不断收到错误,但openssl无法识别为内部或外部命令。问题是,即使我可以解决这个问题,我该怎么办?以后怎么办?
Answers:
这是您需要做的-
从代码 提取中下载openSSl 。在C:/中创建一个文件夹-OpenSSL,然后在此处复制提取的代码。
检测debug.keystore文件路径。如果找不到,则在C:/中进行搜索,然后在下一步中使用命令中的Path。
检测您的keytool.exe路径,并在命令提示符下转到该dir /并在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
。
对于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 ”,要发布,您必须输入在创建密钥库期间设置的密码。
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath>
首先单独运行,看看一切正常。另外,通过管道传输时,keytool处于非交互模式,并且在输入密码时以纯文本形式显示密码。因此,您最好编写一个单独运行命令的小脚本。
请尝试以下方法:
public static void printHashKey(Context pContext) {
try {
PackageInfo info = pContext.getPackageManager().getPackageInfo(pContext.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);
}
}
OpenSSL:如果您的操作系统没有预装它,则必须进行安装(例如Windows没有预装它)。如何安装取决于您的操作系统(对于Windows,请检查coder_For_Life22提供的链接)。
不费吹灰之力的最简单方法就是将openssl.exe二进制文件复制到Windows的keytool路径中。如果您不想这样做,则必须将其添加到PATH
环境变量中。然后执行文档中提供的命令。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
请注意,之后的参数-keystore
指向调试密钥库。此位置还取决于您的操作系统。应位于以下位置之一:
如果您做对了所有事情,都将提示您输入密码。那是android
用于调试证书的。如果密码正确,则控制台会打印一个哈希(有点随机的字符和数字)。
将其复制到android key hash
Facebook上您的应用程序首选项内的字段中。要到达那里,请转到developers.facebook.com/apps,选择您的应用程序,然后转到并向下Edit settings
滚动。之后,请等待几分钟,直到更改生效。
要在本地计算机上生成密钥哈希,请针对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网站
这是完整的详细信息(对于Windows)
1.根据您的系统32bit或64bit 下载第3或第4的OpenSSl(使用e会更好)。
2.将下载的zip解压缩到C目录中
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位置和JDK位置
5.现在我们需要调试密钥库位置,为此打开C〜> Users〜> YourUserName〜> .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
就是这样,您将获得密钥哈希,只需复制并使用它
对于Signed 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
您只需在浏览器控制台中使用一行javascript将十六进制映射键转换为base64。在最新的浏览器中打开控制台(在Windows上为F12),然后粘贴代码并替换SHA-1
SHA-256
Google播放器在Release Managment
> 下提供,十六进制映射App signing
:
> btoa('a7:77:d9:20:c8:01:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "p3fZIMgB3fosO9uy78VaHa73KG8="
也有一个简短的解决方案。只需在您的应用程序中运行它:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
更长的一个不需要FB SDK(基于此处的解决方案):
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);
}
}
结果应以“ =”结尾。
-AAAAAAAA_AAAAAA-AAAAAAAAAA
因为Facebook不允许这样做,printHashKey返回了有效格式的密钥+AAAAAAAA/AAAAAA+AAAAAAAAAA=
对于Windows:
keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%.android \ debug.keystore | openssl sha1 -binary | openssl base64
输入密码:android->按Enter
复制生成的哈希密钥->使用您的开发人员帐户登录Facebook
转到您的Facebook应用程序->设置->“哈希值”选项中的粘贴哈希键->保存更改。
现在使用Facebook登录/共享等测试您的android应用。
从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)
}
}
class MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) GeneratedPluginRegistrant.registerWith(this) } }
这就是我获得我的方式:
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在此异常中添加了RIGHT键。您需要做的就是复制它。
然后将openssl \ bin添加到路径系统变量:
我的电脑->属性->高级配置->高级->系统变量->在系统变量下找到路径,并将其添加到其结尾:; yourFullOpenSSLDir \ bin
现在在jdk \ bin文件夹C:\ Program Files \ Java \ jdk1.8.0_40 \ bin上打开命令行(在Windows上按住shift键并右键单击->在此处打开命令行)并使用:
keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64
并复制提供密码后生成的28个长度的数字。
在您的应用程序中运行以下任一方法:
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);
}
}
然后查看日志。
结果应以“ =”结尾。
这也将帮助新蜜蜂。
只需在@ 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.对于本示例,我们认为您已将文件夹提取到下载文件夹中。
5.现在在键盘上按Windows + R按钮。
6.这将打开运行框。
因此文件地址将为“ C:\ Users \ 0 \ Downloads \ openssl-0.9.8e_X64 \ bin \ openssl.exe”;
7.键入cmd,然后按Ctrl + Shift + Enter。
8.这将以管理员身份打开命令提示符。
9.这里导航到Java的bin文件夹:
:如果您使用JRE由Android工作室提供如下,你会发现路径
一个。打开android studio。
b。文件->项目结构
c。在左窗格中,单击“ SDK位置”
d。在右窗格中“ JDK位置”下方是您的jre路径。
“ C:\ Program Files(x86)\ Java \ jre-10.0.2 \ bin”
e。在此路径的末尾添加“ \ bin”,因为我们需要的文件“ keytool.exe”位于此文件夹中。
对于这个例子,我认为
如果已经安装了32位Java,则
“ C:\ Program Files \ 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安装在其他地方。
您可以从https://console.developers.google.com/projectselector/apis/credentials获取所有指纹,
并使用以下Kotlin代码将其转换为密钥哈希:
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) }
}
https://developers.facebook.com/docs/android/getting-started/
4.19.0-2017年1月25日
Facebook SDK
改性
应用程序启动时,Facebook SDK现在已自动初始化。在大多数情况下,不再需要手动调用FacebookSDK.sdkInitialize()。有关更多详细信息,请参见升级指南。
进行调试
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();
}
只需在OnCreateView或OnStart Actvity中运行此代码,此函数将为您返回开发密钥哈希。
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";
}
我遇到了完全相同的问题,没有要求输入密码,而且看来密钥库文件的路径错误。
实际上,如果密钥工具没有找到您设置的密钥库,它将创建一个密钥库,并给您错误的密钥,因为它没有使用正确的密钥库。
一般规则是,如果不要求您输入密码,则将生成错误的密钥。
你可以使用这个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
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 ****************** ==
如果有人对openssl有问题,请遵循以下说明:
而已
https://sourceforge.net/projects/openssl/files/latest/download