Android-Facebook应用程序的键散列

我正在开发一个Android应用程序,我想在其中集成一个Facebook 发布功能。我下载了Facebook-Android SDK,然后 readme。Md(文本文件)在那里,其中提到要生成 Android的键散列。我如何生成它?< / p >
351193 次浏览

1)创建一个密钥来签署您的应用程序,并记住别名 2)安装OpenSSL,

3)将OpenSSL的bin文件夹放在您的路径下 4)按照FB-Android-SDK 页面上“设置单点登录”中提到的步骤,并生成您的哈希密钥。请确保您输入了正确的别名和keystore文件名 5)在facebook上创建一个应用程序,在“移动设备”页签中输入这个哈希密钥

你需要通过keytool为android的签名应用创建一个密钥库,就像Android网站中描述的过程一样,然后你必须安装cygwin,然后你需要从谷歌代码安装openssl,然后只需执行以下命令,你就会得到android的哈希密钥,然后把这个哈希密钥放入你创建的facebook应用程序中。然后你可以通过Android应用程序访问facebook应用程序的张贴墙(“publish_stream”)可以是一个例子。

$ keytool -exportcert -alias alias_name -keystore sample_keystore。Keystore | openssl sha1 -binary | openssl base64 . Keystore | openssl sha1 -binary

您需要从cygwin执行上面的命令。

以下是步骤

  1. 下载openssl from 谷歌code(如果你有一台64位机器,你必须 Download openssl-0.9.8e X64不是最新版本)

  2. 提取它。在C:/目录下创建一个名为OpenSSL的文件夹,并将解压后的代码复制到这里。

  3. 检测调试。Keystore文件路径。如果你没有找到,那么在C:/中进行搜索,并在下一步中使用命令中的Path。

  4. 检测您的keytool.exe路径,并进入dir/ in命令提示符,并在一行-中运行此命令

    $ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug. keystorekeystore" | "C:\OpenSSL\bin\ OpenSSL " sha1 -二进制 |“C: \ OpenSSL \ bin \ OpenSSL base64 < / p >

    • 它会要求输入密码,输入android
    • 这是所有。你会得到一个key-hash
    • 李< / ul > < / >

有关更多信息< >强访问这里< / >强

当前Facebook的Android教程中的指令在窗户下不能很好地工作。他们的例子展示了如何将keytool输出输出到openssl,但是如果你在Windows下尝试这样做,由于某些原因输出是无效的。我发现我必须使用中间文件才能让它正常工作。以下是对我有用的步骤:

首先从谷歌下载openssl for Windows

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin


C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin


C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

运行这些命令后,有效的散列存储在文件base64.txt中。复制粘贴到你的Facebook应用设置中。

[2020]编辑→现在我完全推荐答案在这里,使用android studio更容易,更快,不需要写任何代码-下面的一个是在eclipse的日子:)-。

您可以在任何活动中使用此代码。它将在logcat中记录hashkey,这是调试键。这很简单,而且比使用SSL轻松。

PackageInfo info;
try {
info = getPackageManager().getPackageInfo("com.you.name", 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));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
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());
}

你可以在知道密钥后删除代码;)

这是Facebook的官方页面给出的内容:

   keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

让我把这个命令分解成几个片段。

  1. 查找"keytool.exe"。你可以在C盘上搜索。你可以在"java jdk""java jre"中找到它。如果安装了多个版本,请选择任意一个。

  2. 打开CMD提示符,进入上面你找到"keytool.exe"的目录。

    剪切“exe”并粘贴Facebook页面上提供的上述命令

  3. 当你在输入输出命令中输入OpenSSL不被识别时,你会得到一个错误。 解决方案:从OpenSSL下载“Openssl”(如果你有64位机器,你必须download openssl-0.9.8e X64 . txt)。提取并保存在任何地方…我把它保存在C:驱动器的OpenSSl文件夹

  4. 将上面命令中的openssl替换为“C:\ openssl \bin\openssl”,在管道“|”后面的两个位置。

  5. 如果提示输入密码,输入android

你会得到你的哈希键。要了解进一步的步骤,请再次参考Facebook页面。

我找到的最简单的解决方法是:

  • 打开原木猫
  • 尝试使用Android SDK访问Facebook
  • 在日志中查找如下一行:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch.
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at
    http://www.facebook.com/developers
    
  • Copy "abcdefgHIJKLMN+OPqrstuvwzyz" and paste it into the Facebook Android Key Hash area.

要获得Android密钥哈希码,请遵循以下步骤:

  1. 下载OpenSSL for Windows 在这里
  2. 现在解压缩到C盘
  3. 打开CMD提示符
  4. 类型cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. 然后只输入__abc0你的用户名__abc1
  6. 完成

将这段代码添加到你的活动的onCreate中,它将在你的logCat的KeyHash标签下打印散列

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 (NameNotFoundException e) {


}
catch (NoSuchAlgorithmException e) {


}

你可以为你的帐户添加多个hashkey,所以如果你在调试不要忘记在发布模式下再次运行它中运行。

Facebook开发者网站的官方文档:

@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) {


}
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

这对我很管用……

步骤:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64


....................   give proper debug.keystore path and openSSL path ..


4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity {


Button btn;
EditText et;
PackageInfo info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.button1);
et=(EditText)findViewById(R.id.editText1);
btn.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub


try {
info = getPackageManager().getPackageInfo("com.example.id", 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));
//String something = new String(Base64.encodeBytes(md.digest()));
et.setText("" + something);
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
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());
}
}
});
}






}

我为Windows和mac os X创建了一个小工具。只需放入密钥存储文件,并获得哈希键。

如果您想要默认调试。Keystore文件,使用默认别名和密码。否则,使用您自己的密钥存储库文件和值。

来看看,下载Windows版本下载Mac OS X版本 (Dev-Host有时可能会宕机…所以如果链接坏了,PM我,我会修复它).

我希望这对你们有帮助……

2014年12月31日-编辑: 更改主机为AFH。 请让我知道如果链接坏了

2013年11月21日-编辑:

根据用户的要求,我添加了一个默认的密钥库位置和捐赠按钮。请随意使用(如果我帮助了您)。:)

截图 截图2

.

Linux

开放式终端:

用于调试构建

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

你会从"中找到debug.keystore。Android "文件夹复制并粘贴在桌面上,并运行上述命令

发布版本

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

注意:确保在这两种情况下,它必须要求密码。如果它不要求输入密码,则意味着命令中有错误。

我犯了一个小错误,应该记住。如果你正在使用你的密钥库,那么给出你的别名,而不是androiddebugkey…

我的问题解决了。现在,如果我的设备上安装了Facebook,那么我的应用程序仍然在Facebook登录集成上获得数据。只关心你的哈希键。

请看下文。

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

然后按输入 -它会问你密码,然后输入你的密钥库密码,而不是Android。

酷。

下载openSSL ->安装它->,它通常安装在< em > C: \ OpenSSL < / em >

然后打开CMD并键入

cd../../Program Files (Enter)


java (Enter)


dir (Enter)


cd jdk1.6.0_17 (varies with jdk versions) (Enter)

C: / / java / jdk_version程序文件检查jdk版本

cd bin (enter)


keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

它会问你密码是android。

最好的方法是使用以下代码:

private void getHashKey(String pkgName)
{
try
{
PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = Base64.encodeBytes(md.digest());
_hashKey_et.setText(hashKey);
Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
}
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
}

但我很沮丧,因为没有简单的工具来为Facebook应用程序生成HashKey。每次我都必须使用Openssl和Keytool,或者使用代码从签名中获得哈希值……

所以我写了一个简单的KeyGenTool来为你做这个工作:-> KeyGenTool on谷歌Play <

享受:)

对于Android应用程序

这段代码用于在Android应用程序中获取Facebook集成的哈希键。我已经测试了所有的设备,一切正常。只更改此代码的包名:

private void facebookHashKey() {


try {
PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
System.out.println("Print the hashKey for Facebook :"+hashCode);
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {


} catch (NoSuchAlgorithmException e) {


}
}

最简单的解决方案:

  1. 不加哈希键,实现其他所有东西
  2. 当facebook登录被按下,你会得到一个错误说“无效的键哈希。密钥哈希“xxx”不匹配任何存储密钥. ...”
  3. 打开facebook应用程序仪表板,并添加哈希值“xxx=”(“xxx”哈希值来自错误+“=”符号)

要生成释放密钥的散列,请在Mac或Windows上运行以下命令,替换释放密钥别名和密钥存储库的路径。

在Windows上,使用:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

这个命令应该生成一个28个字符的字符串。记住复制粘贴这个释放键散列到你的Facebook应用ID的Android设置中。

图片:fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

引用自:https://developers.facebook.com/docs/android/getting-started#release-key-hashhttp://note.taable.com

我已经这样做了Linux操作系统 &Windows操作系统:

Linux:

  • 下载Openssl
  • 打开终端
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

请根据您的要求更改别名Keystore及其路径

终端将为Keystore的密码 。你必须为相同的密钥存储库 提供密码

所以最后你会得到释放Hashkey

窗口:

释放 Hashkey的步骤:

  • 下载Openssl(从在这里下载),我已经下载了64位 OS,你可以找到更多在这里
  • 解压下载的zip文件到C:只\驱动器
  • 打开命令提示符
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

请根据您的要求更改别名Keystore及其路径

注意:

请把你的详细资料放在我标记的** **之间。

终端将为Keystore的密码 。你必须为相同的密钥存储库 提供密码

所以最后你会得到释放Hashkey

完成

  1. 简单地打开主活动文件并创建下面提到的函数:

         try {
    PackageInfo info = getPackageManager().getPackageInfo(
    "your.application.package.name",
    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 (PackageManager.NameNotFoundException e) {
    
    
    } catch (NoSuchAlgorithmException e) {
    }
    

1.1 Run you Application, this will generate a Hash key for your application.

  1. Now, Open log cat and search with "KeyHash" and copy the hash key.

  2. One you generate the Hash key you can remove this function.

  • 下载openSSL for windows在这里你可以找到64bit和32bit在这里

  • 解压缩下载的文件

  • 在C盘中创建文件夹名为openSSL
  • 将所有提取的项目复制到openSSL文件夹(bin,include,lib, openSSL .cnf)
  • 获取android调试密钥库,默认位置为

C:\Users\username\.android\ debug.keystore

  • 现在获得命令提示符并粘贴这段代码

\ users \username.android\debug. keystore C:\Users\username.android\debug。base64 . keystore | "C:\openSSL\bin\ openSSL " sha1 -binary | "C:\openSSL\bin\ openSSL " base64 . keystore | "C:\openSSL\bin\ openSSL

  • 按enter键,你会得到28位的键码

作为回答在类似的问题上,我发现这是为我工作:

  • 将你想知道哈希值的apkname.apk文件复制到“Java \ jdk1.7.0_79 \ bin”文件夹
  • 执行keytool -list -printcert -jarfile apkname.apk命令
  • 复制SHA1值并使用这个网站 . xml转换它
  • 使用转换后的Keyhash值(例如zaHqo1xcaPv6CmvlWnJk3SaNRIQ =)

使用它在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){


}

在Android Studio中也解决了我的问题,但方法略有不同。

在Android Studio中获取SHA-1值。

  1. 点击它
  2. 点击签署报告
  3. sha - 1副本

点击Android studio中的标记面板

  1. SHA-1值如下所示 CD: A1: EA: A3:5C: 5 c: 68: FB:费尔南多-阿隆索:0:6 b: E5:5A: 72:64: DD: 26:8D: 44:84 < / p >

    和打开http://tomeko.net/online_tools/hex_to_base64.php转换 你的SHA1值到base64。这就是Facebook所要求的 生成的哈希 " ********************= " 并复制关键散列 facebook应用控制台。

这个答案的一部分从这里Github链接

你可以从SHA-1密钥获得密钥哈希值。 很简单,你需要从image.enter image description here

下面的Play Store检查中获得你的SHA-1(已签名APK)密钥

现在复制SHA-1密钥并在这个网站http://tomeko.net中过去,还检查下面的图像以获得您的密钥散列。

enter image description here

Kotlin代码获取哈希键

 private fun logHashKey() {
try {
val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
for (signature in info.signingInfo.signingCertificateHistory) {


val md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
val something = Base64.getEncoder().encodeToString(md.digest());
Log.e("hash key", something);
}
} catch (e1: PackageManager.NameNotFoundException) {
Log.e("name not found", e1.toString());
} catch (e: NoSuchAlgorithmException) {
Log.e("no such an algorithm", e.toString());
} catch (e: Exception) {
Log.e("exception", e.toString());
}
}

请不要忘记在调试和发布环境中生成键,因为它们会随着构建设置而变化。

试试这个:

  • 两种方法来获得哈希键值

1)从命令行获取哈希键(官方文档:https://developers.facebook.com/docs/android/getting-started)

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

2)获取哈希键使用代码

  @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


//Hask Kay generation
GetKeyHase();
}


private void GetKeyHase() {
try {
PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = (MessageDigest.getInstance("SHA"));
md.update(signature.toByteArray());
String hashkey_value = new String(Base64.encode(md.digest(), 0));
Log.e("hash key", hashkey_value);
//check you logcat hash key value
}
}catch (Exception e) {
Log.e("exception", e.toString());
}
}

有两个方法可用复杂的简单的

方法一:(小复杂)

首先,你必须下载相应的ssl 64bit32bit,记住下载文件名包含版本代码openssl-0.9.8e_X64.zipopenssl-0.9.8e_WIN32.zip后的e,而不是版本代码后的k

并放置在AndroidStudio/jre/bin目录下,如果你不知道放在哪里,你可以通过右键单击android studio快捷方式找到这个目录:

enter image description here

现在你已经在一个地方处理了两个必需的东西,但是你仍然需要找到debug.keystore的路径,它总是可以在"C:\Users\yourusernamehere\.android\debug.keystore"中找到,

如果你的应用已经发布或即将发布,那么当且仅当你在测试时,使用你的发布签名密钥库 在开发模式下,你可以使用debug,keysotre

当一切都设置好后,让你在base64 format中安排你想要为哈希键生成执行的命令,你的命令将如下所示

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

它将提示您为调试输入密码。密钥存储库,默认为android。如果您使用自己的密钥,那么密码也将是您的。 如果一切顺利,输出将如下所示,希望它可以帮助

enter image description here

第二种方法(分别为简单方法)

如果你不想经历以上所有的过程,那么只需使用下面的方法来记录haskey:

 private void printKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
Log.e("KeyHash:", e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash:", e.toString());
}
}

输出:

enter image description here

在Android Studio只需点击右边的侧边栏面板"Gradle"显示gardel面板,然后: -YOURAPPNAME ——任务 ——安卓 ----(双击)signingReport(启动Gradle Daemon)

然后你会看到结果:

Config: debug
Store: C:\Users\username\.android\debug.keystore
Alias: AndroidDebugKey
MD5: C8:46:01:EA:36:02:D1:21:1B:23:19:91:D4:32:CB:AC
SHA1: 38:AB:4C:01:01:D7:62:E0:61:D1:9F:52:04:0C:E5:07:4E:E4:9B:39
SHA-256: 1B:8C:DC:35:48:10:01:2C:1F:BD:01:64:F1:01:06:01:60:01:A6:8B:10:15:2E:BF:7B:C4:FD:38:4C:C1:74:01
Valid until: Saturday, February 12, 2050

SHA1副本:

38:AB:4C:01:01:D7:62:E0:68:D1:9F:52:04:0C:E5:07:4E:E4:9B:39

去这个页面

粘贴SHA1并生成您的Facebook密钥哈希代码。

我只是为这个确切的目的做了一个工具,即https://keyhash.vaibhavpandey.com/。它比其他任何方法都简单,因为它需要您浏览计算机上的密钥存储库,并输入密码短语来为谷歌&生成sha - 1 十六进制Base64版本;Facebook的分别。

不必担心密钥库或密码短语,因为工作完全在浏览器中完成,您可以检查网络选项卡,该工具也是开源的https://github.com/vaibhavpandeyvpz/keyhash

这是Xamarin的版本


private void printKeyHash()
{
try
{
PackageInfo info = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Signatures);
foreach (var signature in info.Signatures)
{
MessageDigest md = MessageDigest.GetInstance("SHA1");
md.Update(signature.ToByteArray());
var hash = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
Log.Debug("KeyHash:", hash);
}
}
catch (PackageManager.NameNotFoundException e)
{


}
catch (NoSuchAlgorithmException e)
{


}
}
This required no coding input. Go to Android Studio->
Click on Right side panel "Gradle"=>
*Your App Name =>
*Your App Name(root)=>
*Tasks=>
*android =>
*Double click on **signinReport**=>
Will get
example :
SHA1: [![6A:DE:ED:5A:9F:0B:19:47:38:DC:DE:3B:7B:A2:D7:4C:6C:0A:24:70][1]][1]


Go to


http://fbkeyhash.com/index.php
Paste your SHA-1

你可以从Java/Kotlin Activity中打印哈希键。部分代码已弃用,但这里是包含新旧代码的完整解决方案。

private fun printHashKey(context: Context) {
try {


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNING_CERTIFICATES
)


for (signature in packageInfo.signingInfo.apkContentsSigners) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
} else {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNATURES
)


for (signature in packageInfo.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
}


} catch (e: PackageManager.NameNotFoundException) {
Log.d(TAG, "printHashKey: PackageManager.NameNotFoundException -> $e")
} catch (e: NoSuchAlgorithmException) {
Log.d(TAG, "printHashKey: NoSuchAlgorithmException -> $e")
}
}

这个方法对我来说很有效,我做了一些观察:

  1. 每个SHA1密钥都有一个对应的密钥散列,长度为28个字符,以'='结尾

  2. 我已经尝试了在线工具从我的SHA1中获得哈希键,但这个键哈希从未为我工作过。

  3. 如果你在windows上安装open-ssl从这里:开放的ssl

  4. 我已经在我拥有的所有keystore文件上使用了这个keytool命令,即登台,调试和发布。

keytool -exportcert -alias my_alias_name -keystore "C:\Users\...my_filename.jks" | "C:\Openssl\bin\openssl.exe" sha1 -binary | "C:\Openssl\bin\openssl.exe" base64
< p >注意: 上面的方法总是会给你一个键散列,即使你填错了任何参数。知道你是否得到正确的哈希键的技巧是-在运行此命令后,如果提示您输入密码,这意味着后续的密钥是正确的

不要使用my_filename.keystore,而是使用my_filename.jks