Android-Facebook应用程序的密钥哈希

时间:2010-12-08 15:08:54

标签: android windows facebook

我正在开发一款Android应用,我希望整合一款Facebook 发布功能。我下载了Facebook-Android SDK,我得到了 readme.md(文本文件)在那里,提到它生成 Android的关键哈希。我该如何生成它?

40 个答案:

答案 0 :(得分:305)

以下是步骤 -

  1. Google code下载openssl(如果您有64位计算机,则必须download openssl-0.9.8e X64而不是最新版本)

  2. 提取它。在C:/中创建一个文件夹-OpenSSL,并在此复制提取的代码。

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

  4. 检测您的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
    • 就是这样。你会得到一个密钥哈希
  5. 了解更多信息visit here

答案 1 :(得分:226)

您可以在任何活动中使用此代码。它会将logkey记录在logcat中,这是调试密钥。这很简单,比使用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());
}

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

答案 2 :(得分:132)

我为Windows和Mac OS X创建了一个小工具。只需输入密钥存储文件,然后获取哈希密钥。

如果需要默认的debug.keystore文件,请使用默认别名和密码。否则,请使用您自己的密钥库文件和值。

结帐,download the Windows versiondownload the Mac OS X version (开发者主机有时可能会关闭......所以如果链接坏了,PM我和我会修复它。)

我希望能帮到你们......

2014年12月31日 - 编辑: 将主机更改为AFH。 如果链接断开,请告诉我

2013年11月21日 - 编辑:

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

Screen shot Screen shot 2

答案 3 :(得分:59)

目前Facebook's Android Tutorial中的说明在 Windows 下无效。他们的示例显示了如何将keytool输出传递给openssl,但如果在Windows下尝试此操作,则输出由于某种原因无效。我发现我必须使用中间文件才能使其正常工作。以下是对我有用的步骤:

首先从Google下载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上的应用设置中。

答案 4 :(得分:47)

这是the official page of 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)。将其解压缩并保存在任何地方......我将其保存在OpenSSl文件夹中的C:驱动器

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

    < / LI>
  5. 如果系统提示输入密码,请输入android

  6. 您将获得您的哈希密钥。有关更多步骤,请再次参阅Facebook页面。

答案 5 :(得分:31)

将此代码添加到您活动的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) {

}

您可以为您的帐户添加多个哈希密钥,因此如果您在调试中运行,请不要忘记在发布模式下再次运行

答案 6 :(得分:23)

要获取Android密钥哈希码,请按以下步骤操作:

  1. 下载适用于Windows的OpenSSL here
  2. 现在解压缩到C盘
  3. 打开CMD提示
  4. 输入cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. 然后仅键入keytool -export -alias myAlias -keystore C:\Users\您的用户名\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. 完成

答案 7 :(得分:14)

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

  • 打开Log Cat
  • 使用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
    
  • 复制&#34; abcdefgHIJKLMN + OPqrstuvwzyz&#34;并将其粘贴到Facebook Android Key Hash区域。

答案 8 :(得分:12)

我已经通过这种方式为 Linux OS &amp; Windows操作系统

Linux的:

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

请根据您的要求更改 Alias Name Keystore及其路径

终端询问以获取密钥库的密码。您必须为同一密钥库 提供密码

所以最后你会得到发布Hashkey

视窗:

发布 Hashkey 的步骤:

  • 下载Openssl(从here下载),我已下载 64位操作系统,您可以找到更多here
  • 将下载的zip文件解压缩到仅限C:\ drive
  • 打开命令提示符
  • 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

请根据您的要求更改 Alias Name Keystore及其路径

注意:

请将您的详细信息放在我** **之间标记的位置。

终端询问以获取密钥库的密码。您必须为同一密钥库 提供密码

所以最后你会得到发布Hashkey

完成

答案 9 :(得分:11)

  • 在这里下载openSSL for windows you can find 64bit and 32bit here

  • 提取下载的文件

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

C:\ Users \用户名\ .android \ debug.keystore

  • 现在获取命令提示符并粘贴此代码
  

keytool -exportcert -alias androiddebugkey -keystore C:\ Users \ username.android \ debug.keystore | “C:\ openSSL \ bin \ openssl”sha1 -binary | “C:\ openSSL \ bin \ openssl”base64

  • 按Enter键,您将获得28位数的键码

答案 10 :(得分:6)

你需要通过keytool创建一个密钥库,用于android的签名应用程序,如Android Site中描述的过程,然后你必须安装cygwin然后你需要从google code安装openssl然后执行以下命令,您将获得android的哈希键,然后将该哈希键放入您创建的Facebook应用程序中。然后你可以通过Android应用程序访问Facebook应用程序发布墙(“publish_stream”)可能是一个例子。

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

您需要从cygwin执行上述命令。

答案 11 :(得分:6)

  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) {
     }
    
  2. 1.1运行应用程序,这将为您的应用程序生成一个哈希键。

    1. 现在,打开log cat并使用“KeyHash”进行搜索并复制哈希键。

    2. 您生成哈希密钥后,可以删除此功能。

答案 12 :(得分:6)

下载openSSL - &gt; 安装 - &gt; 它通常会安装在 C:\ OpenSSL

然后打开cmd并输入

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

java (Enter)

dir (Enter)

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

检查jdk版本转到 C:/ program files / java / jdk_version

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。

答案 13 :(得分:5)

您可以从SHA-1密钥获取密钥哈希。 非常简单,您需要从Play商店获取SHA-1(签名APK)密钥,如下图所示。enter image description here

现在复制该SHA-1密钥并将其粘贴到此网站http://tomeko.net中,并检查下图以获取您的密钥哈希。

enter image description here

答案 14 :(得分:5)

facebook developer site上的官方文档:

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

    }

答案 15 :(得分:5)

1)创建一个密钥以对您的应用程序进行签名,并记住别名。

2)安装OpenSSL。

3)将OpenSSL的bin文件夹放在路径中。

4)按照FB-Android-SDK page上“设置单点登录”中提到的步骤,生成哈希密钥。确保输入正确的别名和密钥库文件名。

5)在Facebok上创建一个应用程序,在“移动设备”选项卡下输入此哈希密钥。

答案 16 :(得分:4)

适用于Linux

打开终端:

用于调试版本

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

注意:确保在两种情况下都必须要求输入密码。如果它没有要求输入密码就意味着命令出错了。

答案 17 :(得分:4)

关于类似问题的answered,我发现这对我有用:

  • 将您想知道哈希值的apkname.apk文件复制到&#39; Java \ jdk1.7.0_79 \ bin &#39;夹
  • 运行此命令keytool -list -printcert -jarfile apkname.apk
  • 复制SHA1值并使用此site
  • 进行转换
  • 使用转换后的Keyhash值( ex.zaHqo1xcaPv6CmvlWnJk3SaNRIQ =

答案 18 :(得分:4)

复杂的一种简单的一种

方法一:(小复杂度)

首先,您必须相应地下载ssl 64bit32bit,请记住以版本代码openssl-0.9.8e_X64.zip之后的名称下载包含e的文件,或者openssl-0.9.8e_WIN32.zip不能在版本代码后加上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

它将提示您输入debug.keystore的密码,默认情况下为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

答案 19 :(得分:4)

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

答案 20 :(得分:4)

适用于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) {

    }
}

答案 21 :(得分:3)

要生成发布密钥的哈希值,请在Mac或Windows上运行以下命令,替换您的发布密钥别名和密钥库的路径。

在Windows上,使用:

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

此命令应生成28个字符串。请记住 COPY PASTE 此版本密钥哈希到您的Facebook App ID的Android设置中。

image: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

答案 22 :(得分:2)

最简单的解决方案:

  1. 不要添加哈希键,实现其他所有内容
  2. 当按下facebook登录时,您将收到一条错误消息&#34;无效的密钥哈希。关键哈希&#34; xxx&#34;与任何存储的密钥都不匹配。 ...&#34;
  3. 打开Facebook应用信息中心并添加哈希&#34; xxx =&#34; (&#34; xxx&#34;来自错误的哈希+&#34; =&#34;签署)

答案 23 :(得分:2)

将此用于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){

    }

答案 24 :(得分:1)

首先,要在本地计算机上生成密钥哈希,请针对Android调试密钥库运行Java的keytool实用程序(应位于控制台的路径上)。默认情况下,这是您家中的.android目录)。

在ubuntu上,它在我的电脑中消失了

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

答案 25 :(得分:1)

在Android Studio中,只需单击右侧栏面板“渐变”以显示gardel面板,然后: -您的APPNAME - 任务 -Android ----(双击)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

转到此PAGE

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

答案 26 :(得分:1)

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

要在Android Studio中获取SHA-1值。

  1. 点击摇篮
  2. 点击签名报告
  3. 复制SHA-1

Click marked panel in Android studio

  1. SHA-1值看起来像这样 CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

    并打开http://tomeko.net/online_tools/hex_to_base64.php进行转换 您的SHA1值设为base64。这就是Facebook要求的 生成的哈希值“ ************************ =”并将密钥哈希值复制到 Facebook应用程序控制台。

部分答案来自此处Github Link

答案 27 :(得分:1)

我犯了一个应该记住的小错误。如果您使用的是密钥库,则提供别名,而不是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

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

冷却。

答案 28 :(得分:1)

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

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 Google Play <-

享受:)

答案 29 :(得分:1)

在c drive和openssl文件夹中保持打开ssl后使用此命令。

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.android\debug.keystore" | openssl sha1 -binary | openssl base64

答案 30 :(得分:0)

对于Windows:-

1.Download openssl(openssl-for-windows)
2.Copy and Paste openssl folder into c drive.
3.C:\Android\.android\debug.keystore => Debug Keystore path
4.C:\Program Files\Java\jdk1.8.0_181 => JDK PATH
5.Go to jdkpath=>Enter the below command. (keytool inside Debug keystore path)  

keytool -exportcert -alias androiddebugkey -keystore C:\ Android.android \ debug.keystore    |“ C:\ openSSL \ bin \ openssl” sha1 -binary | “ C:\ openSSL \ bin \ openssl” base64

答案 31 :(得分:0)

我尝试使用keytool生成密钥哈希,但某种程度上,生成的哈希不是有效的哈希。

如果您可以从packageManager本身获得它,则可以节省时间和精力。

try {
    val info = this.packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
    for (signature in info.signatures) {
        MessageDigest.getInstance("SHA").apply {
            update(signature.toByteArray())
            Log.d("KeyHash:", Base64.encodeToString(digest(), Base64.DEFAULT))
        }
    }
} catch (e: PackageManager.NameNotFoundException) {
    Log.d("KeyHash Exception:", "${e.message}")
} catch (e: NoSuchAlgorithmException) {
    Log.d("KeyHash Exception:", "${e.message}")
}

答案 32 :(得分:0)

对于那些不知道如何编码的人来说,AivarsDa在Google Play上的关键生成工具是最简单的解决方案。只需从中获取哈希键并复制到Facebook应用程序设置。密钥工具上的共享使我的应用程序在我的手机上崩溃,所以我只需在记事本中手动输入它并将其复制到fb。经过几天的挫折后,最后经过这一步

答案 33 :(得分:0)

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());
    }
}

请不要忘记在调试和发布环境中生成密钥,因为它们会根据构建设置进行更改。

答案 34 :(得分:0)

尝试一下:

  • 获取哈希键值的两种方法

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

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

OR

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());
            }
        }

答案 35 :(得分:0)

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());
                }
            }
        });
    }



}

答案 36 :(得分:0)

我只是为此目的制作了一个工具,即https://keyhash.vaibhavpandey.com/。它比其他任何操作都要简单,因为它要求您浏览计算机上的密钥库并输入密码,以生成 SHA-1 Hex Base64 版本分别适用于Google和Facebook。

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

答案 37 :(得分:0)

这是 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)
    {

    }
}

答案 38 :(得分:0)

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

答案 39 :(得分:0)

您可以从 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")
    }
}